Rails - 在对OpenLDAP服务器进行身份验证后确定组成员身份

时间:2013-01-15 22:12:32

标签: ruby-on-rails authentication devise authorization openldap

我正在维护一个使用Devise LDAP进行身份验证的Rails应用程序。我正在从Active Directory迁移到OpenLDAP,我已经设置了相同的结构。在安装Ubuntu Client 12.04 64位时,使用apt-get软件包slapdldap-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 个答案:

答案 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