我正在维护一个使用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)
答案 0 :(得分:2)
a)您是否尝试使用
设计:: LdapAdapter.get_groups(电子邮件)
b)你看过/config/ldap.yml
了吗?其中有一些配置参数(如required_groups,require_attribute,check_group_membership)。可能它只是被配置为忽略memberOf
您可以查看here中如何使用所有这些内容。
答案 1 :(得分:0)
如果您正在使用devise ldap插件,请使用此
connection = Devise :: LDAP :: Connection.new({:login =>" user1"}) connection.in_group(' CN = GRP1, - &#39)
如果user1存在于grp1
中,则返回true