ruby-on-rails-3 – Rails 3&devise_ldap_authenticatable:针对Active Directory的授权?

我成功地将我的Rails 3应用程序与devise和devise_ldap_authenticatable一起运行,以针对本地Active Directory进行身份验证.

现在我想添加授权功能,以便只允许访问属于某些AD组的AD用户.

所以要简单的开始,我首先在AD中使用linux命令ldapsearch查找自己的用户.结果包含像…

(...)
memberOf: CN=my,OU=foo,DC=bar,DC=role,DC=domain,DC=com
memberOf: CN=my,DC=bar2,DC=com
memberOf: (...)
(...)

好的,现在我决定,我想限制访问CN = my,OU = foo,DC = bar,DC = role,DC = domain,DC = com的成员.

所以,我改变了我的ldap.yml包含:

authorizations: &AUTHORIZATIONS
  group_base: ou=role,dc=domain,dc=com
  required_groups:
    - CN=my,DC=com

development:
  (...)
  <<: *AUTHORIZATIONS

另外改变了我的devise.rb包含:

Devise.setup do |config|
  config.ldap_logger = true
  config.ldap_create_user = true
  config.ldap_update_password = false
  config.ldap_check_group_membership = true # <-- activated this line
  config.ldap_use_admin_to_bind = true
  #config.ldap_ad_group_check = true <-- don't know what this is good for

现在,当试图进行身份验证时,访问被拒绝,我没有想到:

User CN=myuser,OU=org,DC=com is not in group: CN=my,DC=com

任何想法,如何使用devise_ldap_authenticatable完成对AD的授权?该模块的文档在授权方面还不是很全面.

解决方法

注意:代表OP( @kwirschau)添加答案

>更改devise.rb以激活属性ldap_check_attributes,并删除/注释掉ldap_check_group,因为它不检查AD特定的属性memberOf
>更改ldap.yml并注释掉group_base和required_groups.将所需的组成员身份添加到require_attribute.

总而言之,问题示例中的设置如下所示:

# devise.rb

Devise.setup do |config|
  # [ ... ]
  config.ldap_check_attributes = true
  # [ ... ]
end

# ldap.yml

# [ ... ]
authorizations: &AUTHORIZATIONS
  #group_base: ou=role,dc=com
  #required_groups:
  #  - CN=my,DC=com
  require_attribute:
    memberOf: CN=my,DC=com
# [ ... ]

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...