3

我正在维护一个使用 Devise LDAP 进行身份验证的 Rails 应用程序。我正在从 Active Directory 迁移到 OpenLDAP,我已经设置了相同的结构。OpenLdap 是使用apt-get软件包安装的,slapdldap-utils安装了 Ubuntu Client 12.04 64 位。

我可以针对 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 身份验证相关的 gem 是(来自 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) 
4

2 回答 2

2

a) 您是否尝试使用

设计::LdapAdapter.get_groups(电子邮件)

b) 你看过 /config/ldap.yml

那里有一些配置参数(如 required_groups、require_attribute、check_group_membership)。可能只是配置为忽略 memberOf

您可以在这里查看它们是如何使用的。

于 2013-01-24T17:17:07.667 回答
0

如果您使用的是设计 ldap 插件,请使用此插件

connection = Devise::LDAP::Connection.new({:login=>"user1"}) connection.in_group?('cn=grp1,--')

如果 user1 存在于 grp1 中,则返回 true

于 2016-12-09T06:13:35.827 回答