我正在维护一个使用Devise LDAP进行身份验证的Rails应用程序 . 我正在从Active Directory迁移到OpenLDAP,我已经设置了相同的结构 . 在安装Ubuntu Client 12.04 64位时,使用 apt-get
软件包 slapd
和 ldap-utils
安装了OpenLdap .
我可以对OpenLdap进行身份验证,但是当我打电话时
Devise::LdapAdapter.get_ldap_entry(email)["memberOf"]
我正在返回一个空数组 . 在rails控制台中,我可以看到返回的ldap条目没有“ memberOf
”条目 .
当我从终端查询ldap服务器时,我收到以下输出:
ldapsearch -H ldapi:/// -x -b "cn=people,dc=example,dc=local" memberOf
...
# fred fred, people, example.local
dn: cn=fred fred,cn=people,dc=example,dc=local
memberOf: cn=Authorisers,ou=example,dc=example,dc=local
...
有人知道为什么 ldapsearch
可能会向Devise返回不同的结果吗?有人知道如何返回memberOf属性吗?
提前致谢
与ldap身份验证相关的宝石是(从Bundle输出)
Using devise (2.1.2)
Using net-ldap (0.2.2)
Using devise_ldap_authenticatable (0.6.1)
Using activesupport (3.2.9)
Using activemodel (3.2.9)
Using sprockets (2.2.2)
Using mail (2.4.4)
Using activerecord (3.2.9)
Using activeresource (3.2.9)
2 回答
a)你试过用吗?
设计:: LdapAdapter.get_groups(电子邮件)
b)你看过/config/ldap.yml
那里有一些配置参数(如required_groups,require_attribute,check_group_membership) . 可能它只是被配置为忽略memberOf
你可以看看here中是如何使用它们的 .
如果您正在使用devise ldap插件,请使用此方法
connection = Devise :: LDAP :: Connection.new({:login =>“user1”})connection.in_group?('cn = grp1, - ')
如果user1存在于grp1中,则返回true