# はじめに
この記事は田胡研初夏のAdventCalendar2017 4日目の記事です.
今日はRubyでLDAPの認証を利用したりしたときの話とちょっとしたサンプルコードを晒します.
# RubyでLDAPを使うとき
RubyでLDAPを使う際便利なGemはいくつかあります.
* ruby-ldap (http://ruby-ldap.sourceforge.net/)
* net-ldap ( https://github.com/ruby-ldap/ruby-net-ldap )
* active-ldap ( https://github.com/activeldap/activeldap )
などです.
この内どれを使うか悩んだのですがnet-ldapを使うことにしました.
理由としては
* なんか一番情報が多かった( コードサンプルとか )
* LDAPの問い合わせ操作がLDAPに近くLDAPを触るようにRuby上のコードがかける
ことです.
まず先にどんな感じで書けばLDAPの情報が引けるのか示します.
# 単純にログインチェック
net-ldapはgemで公開されているのでGemfileに書いて持ってきます.
そしてこんな感じのコードを書きます.
```ruby
require 'net/ldap'
ldap = Net::LDAP.new
ldap.host = LDAP_SERVER_HOST
ldap.port = LDAP_PORT
# アクセスのベースディレクトリを指定
ldap.base = LDAP_BASE
# ログインするldapidとpassword
username = params[:username]
password = params[:password]
# LDAP上での名前に
luname = "uid=#{username},LDAP_BASE"
ldap.auth luname, password
# このbindがtrueならログインできる, falseはログインできない.
ldap.bind
```
思ったより複雑ではなかったです, ライブラリ様様ですね.
# ユーザの属性取得
ログイン試行のコード例はいろいろあるのですがそれ以外があまり情報がなく少し手間取りました.
ユーザの属性取得はFilterを利用してこんな感じ.
```ruby
# 前述コードのldap.authのあとから
ldap.open do |conn|
filter = Net::LDAP::Filter.eq('uid', username)
@entry = conn.search(filter: filter).first
end
# @entryはMapで回すと属性が取れる.
@entry do |key, value|
p key
p value
end
```
LDAPのクエリを少し調べないといけないのですがLDAPのクエリのサンプルはそこそこ転がっていて,それをRuby上のコードにするのは簡単でした.
あるユーザの所属するグループ一覧を出すクエリなどは実現方法がわからずLDAPのデータを引いてきたあとにRuby側でフィルタするということを行って実現しました.
# 田胡研のLDAPサーバのラッパーAPI
ここまで示したようなコードを使ってLDAPのクエリを書いていけばRubyからLDAPの情報を引いてくることができます.
ただLDAP自体メジャーな技術ではなかったり触るのが少し癖があったりで皆が手軽に利用するのは大変なので,
田胡研では今回書いたような方法でLDAPにアクセスし認証を行ったり,LDAPの情報をJSONで返す(WebAPI)を用意しています.
APIでは以下の情報が取得できます.
* ログイン試行 (userid+password or token)
* 自分の情報
* 自分の所属するグループのリスト
* 任意の人の情報(セキュアなものはないので弊研のLDAPはログインさえできれば他人の属性も引けます)
このAPIを利用しいくつかのサービスを田胡研では開発しています.
( 田胡研メンバでLDAP認証系利用したいような人がいればswagger-doc等のリンクはnamazuさんのwiki個人ページにあるので参照してください. )
Good blog. Keep sharing. I love them Are you also searching for dissertation writing help? we are the best solution for you. We are best known for delivering dissertation assignment services to students without having to break the bank
返信削除Hard Rock Hotel & Casino TulsaHard Rock Tulsa
返信削除Hard Rock Hotel & Casino Tulsa is the 경기도 출장마사지 ultimate 광주광역 출장마사지 destination 광명 출장샵 for gaming and entertainment, featuring more than 2600 electronic games, 김포 출장안마 a popular 밀양 출장안마 music venue,