私は現在、ユーザー認証を担当する Rails プロジェクトに取り組んでいます。サードパーティ認証を使用することに決めたので、セットアップ例に従ってみました。この例は Kevin Thompson によって作成され、 exampleと呼ばれます。
LDAP サーバーのドキュメントによると、実行する必要がある手順は次のとおりです。
- LDAP サーバーに接続します。
- 匿名でバインドします (DN とパスワードなし)。
- ユーザー名を使用して LDAP エントリを検索します
- 見つかった場合は、ユーザー名の DN を取得します。
- 指定したユーザーの DN とパスワードで再バインドします。
- この再バインドが成功すると、ユーザーは認証されます。
私はトンプソンの例に従いましたが、私は気の利いたものを使用していません。ユーザー管理にはdeviseを、認証にはomniauth-ldapを使用します。しかし、それは完全には機能していません。サーバーのドキュメントで指示されていることと、omniauth-ldap が実際に行っていることとの不一致と関係があるのではないかと考えています...
具体的には、私の問題は、常に「資格情報が無効です」というエラーが発生することです。これは、私がしなければならないことと omniauth-ldap が行っていることが一致していないためですか?
アドバイスや提案は大歓迎です!
私がどのようにセットアップしたかについてのもう少しの情報 (匿名性を維持するために、いくつかのものを置き換えました) リクエストに応じて、私のコードをさらに投稿できます。
config/initializers/devise.rb:
config.omniauth :ldap,
:host => 'ldap1.its.domain.ext',
:base => 'ou=People, dc=domain, dc=ext',
:port => 389,
:attrs => 'uid',
:method => :plain,
:uid => 'uid'
アプリ/コントローラー/ユーザー/omniauth_callbacks_controller.rb:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
skip_before_filter :verify_authenticity_token
def ldap
ldap_return = request.env["omniauth.auth"]["extra"]["raw_info"]
username = ldap_return.uid[0].to_s
if @user = User.find_by_username(username)
sign_in_and_redirect @user
else
@user = User.create(:username => username,)
sign_in_and_redirect @user
end
end
end