LDAP组身份验证失败:无效的绑定信息

时间:2016-02-25 15:28:42

标签: ruby-on-rails authentication devise ldap

我使用devise_ldap_authenticatable通过LDAP登录我的Rails应用。登录适用于用户(使用用户名),但不适用于组:当我尝试检查用户是否在特定组中时,我得到:

  

' Net :: LDAP :: BindingInformationInvalidError in   设计:: SessionsController#创建

     

无效的绑定信息

     

提取的来源(第244行):   raise Net :: LDAP :: BindingInformationInvalidError,"无效的绑定信息"除非(用户&& psw)

我尝试了几种建议的解决方案,但它们都因上述错误而失败。

首次尝试解决方案

我尝试在config.ldap_check_group_membership=false中将config.ldap_check_group_membership=true更改为devise.rb

config.ldap_create_user = true
config.ldap_check_group_membership = true
config.ldap_check_attributes = false
config.ldap_use_admin_to_bind = false
config.ldap_ad_group_check = true (also tried false with this one)

并在ldap.yml文件中设置组,如下所示:

authorizations: &AUTHORIZATIONS
    group_base: OU=US,DC=um,DC=com #also tried without group_base, with group_base DC=um,DC=com
    required_groups:
        - CN=D US Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com
        - CN=B US Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com

后来就是这样:

authorizations: &AUTHORIZATIONS
    #also tried without group_base, with group_base DC=um,DC=com
    group_base: OU=US,DC=um,DC=com 
    required_groups:
        ["memberOf", "CN=D US  Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com;CN=B US Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com"]

第二次尝试解决方案

在此失败后,我也尝试将ldap_check_attributes=false更改为ldap_check_attributes=true中的devise.rb

config.ldap_create_user = true
config.ldap_check_group_membership = false
config.ldap_check_attributes = true
config.ldap_use_admin_to_bind = false

并在ldap.yml文件中设置属性,如下所示:

authorizations: &AUTHORIZATIONS
    require_attribute:
        memberOf: CN=D US Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com
development:
    host: <%= ENV["LDAP_HOST"] %>
    port: <%= ENV["LDAP_PORT"] %>
    attribute: 'userprincipalname'
    base: 'DC=um,DC=com' 
    ssl: <%= ENV["LDAP_SSL"] %>
    <<: *AUTHORIZATIONS

我知道该组是正确的,我可以访问AD。当我在那里看我的账户时,我看到这样的事情:

memberOf:  CN=D US Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com;CN=B US
       Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com

我做错了什么?

1 个答案:

答案 0 :(得分:0)

今天我找到了一个有效的解决方案。我已经改变了devise.rb这样的文件:

 config.ldap_create_user = true
 config.ldap_check_group_membership = false
 config.ldap_check_attributes = true
 config.ldap_use_admin_to_bind = false

ldap.yml就是这样:

authorizations: &AUTHORIZATIONS
    #group_base:
    #required_groups:
    require_attribute:
        memberOf: CN=D US Workers,OU=Workers,OU=abc,OU=US,DC=um,DC=com

development:
    host: <%= ENV["LDAP_HOST"] %>
    port: <%= ENV["LDAP_PORT"] %>
    attribute: sAMAccountName
    base: DC=um,DC=com
    ssl: <%= ENV["LDAP_SSL"] %>
    admin_user: <%= ENV["LDAP_ADMIN_USER"] %> # currently my own: CN=name surname,OU=Workers,OU=abc,OU=US,DC=um,DC=com
    admin_password: <%= ENV["LDAP_ADMIN_PASSWORD"] %> currently my own password
    <<: *AUTHORIZATIONS

如果我找到更好的解决方案,我会发布它。随意建议你的方式。