1

net-ldap gem Web サイトから提供されたテスト コードを使用してサインインできますが、同じログイン設定が Rails のデバイスでは機能しません。

これは、devise を使用して Rails にログインしようとしたときのサーバー ログです。

Started POST "/users/sign_in" for 127.0.0.1 at Fri Mar 22 10:53:39 -0700 2013
Processing by Devise::SessionsController#create as HTML
  Parameters: {"commit"=>"Sign in", "authenticity_token"=>"bEmEPHuI8ob+O67hy0mpgGm12KzFnBNwRuhALAJzmCg=", "user"=>{"remember_me"=>"1", "email"=>"somerandomeusername@corp.bigasscorporation.com", "password"=>"[FILTERED]"}, "utf8"=>"✓"}
  User Load (0.5ms)  SELECT `users`.* FROM `users` WHERE `users`.`email` = 'somerandomeusername@corp.bigasscorporation.com' LIMIT 1
  LDAP: LDAP dn lookup: mail=somerandomeusername@corp.bigasscorporation.com
  LDAP: LDAP search for login: mail=somerandomeusername@corp.bigasscorporation.com
  LDAP: Authorizing user mail=somerandomeusername@corp.bigasscorporation.com,OU=Users,OU=Users_and_Groups,DC=corp,DC=bigasscorporation,DC=com
  LDAP: LDAP dn lookup: mail=somerandomeusername@corp.bigasscorporation.com
  LDAP: LDAP search for login: mail=somerandomeusername@corp.bigasscorporation.com
DEPRECATION WARNING: an empty resource was given to Devise::Strategies::LdapAuthenticatable#validate. Please ensure the resource is not nil. (called from require at script/rails:6)
Completed 401 Unauthorized in 64ms

以下は私の環境に関する情報です

ルビー 1.8.7

レール 3.2.13

使用した宝石

  • gem "devise", "~> 2.2.2"
  • gem "net-ldap", '~> 0.2.2'
  • gem "devise_ldap_authenticatable", '~> 0.6.1'

LDAP 構成

config/ldap.yml

authorizations: &AUTHORIZATIONS
  group_base: OU=Users,OU=Users_and_Groups,DC=corp,DC=somebigasscorporation,DC=com
  required_groups:
    - cn=Users,OU=Users_and_Groups,DC=corp,DC=somebigasscorporation,DC=com
    - OU=Users,OU=Users_and_Groups,DC=corp,DC=somebigasscorporation,DC=com
    - ["moreMembers", "cn=users,ou=groups,dc=test,dc=com"]
  require_attribute:
    objectClass: inetOrgPerson
    authorizationRole: postsAdmin

## Enviornments

development:
  host: xxx.corp.somebigasscorporation.com
  port: 3268
  attribute: mail
  base: OU=Users,OU=Users_and_Groups,DC=corp,DC=somebigasscorporation,DC=com
  # admin_user: cn=admin,dc=test,dc=com
  # admin_password: admin_password
  ssl: false
  # <<: *AUTHORIZATIONS

config/initializers/devise.rb

Devise.setup do |config|
  config.ldap_create_user = true

  ...

動作するテストコード

require 'rubygems'
require 'net/ldap'
require 'highline/import'

ldap = Net::LDAP.new
ldap.host = "xxx.corp.bigasscorporation.com"
ldap.port = "3268"
ldap.base = "OU=Users,OU=Users_and_Groups,DC=corp,DC=bigasscorporation,DC=com"
ldap.auth "somerandomuser@corp.bigasscorporation.com", "xxxXXXyyy"

if ldap.bind
  p "Success!!"
  p ldap
  p ldap.base
  p ldap.get_operation_result
else
  p "Failed!"
  p ldap.get_operation_result
end

# => "Success!!"
#<Net::LDAP:0x007fc393a22660 @host="xxx.corp.bigasscorporation.com", @port="3268", @verbose=false, @auth={:method=>:simple, :username=>"somerandomuser@corp.bigasscorporation.com", :password=>"xxxXXXyyy"}, @base="OU=Users,OU=Users_and_Groups,DC=corp,DC=bigasscorporation,DC=com", @encryption=nil, @open_connection=nil, @result=0>
"OU=Users,OU=Users_and_Groups,DC=corp,DC=bigasscorporation,DC=com"
#<OpenStruct code=0, message="Success">
4

2 に答える 2

5

これはdevise.rbで必要でした

config.ldap_auth_username_builder = Proc.new() {|attribute, login, ldap| "#{login}" }

于 2013-03-22T19:52:27.490 に答える
0

他の誰かがこの同じ問題を抱えている場合に備えて、ldap_auth_username_builder修正にわずかな問題があることがわかりました。また、.yml ファイルの必須属性にいくつかの承認を設定しようとしていましたがldap.search、gem によってメソッドが呼び出された後に多くの奇妙なエラーが発生していました。.try(:first)特に、 nil を返す検索で多くの呼び出しがありました。

最終的に、gem の lib ディレクトリを掘り下げて、ログを改善するためにいくつかのコードを微調整しました。を追加したときconfig.ldap_auth_username_builder、実際にはレコードが見つからないのに見つかったとシステムに信じ込ませていたことがわかりました。そもそもレコードがなかったため、これらのレコードの属性を指定できませんでした。グループメンバーシップのチェックなど、同様のことをしようとしているattribute場合は、ファイルの値がldap.yml有効な属性に設定されていること、および正しい情報を提供していることをトリプルチェックすることをお勧めします。 LDAP側で必要なものを見つけてください。

于 2013-06-01T23:30:44.003 に答える