我成功地将我的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 # [ ... ]