1

In our LDAP directory, we have users, who are mapped to groups. Those groups may be mapped to other groups. For example:

cn=group1,cn=groups,dc=example,dc=com
    uniquemember cn=user1,cn=user,dc=example,dc=com
cn=group2,cn=groups,dc=example,dc=com
    uniquemember cn=user2,cn=user,dc=example,dc=com
    uniquemember cn=group1,cn=user,dc=example,dc=com

So User1 belongs to Group1, but User2 belongs to Group2, which in turn belongs to Group1

Within Grails, User1 has authority to Group1, but User2 only has authority to Group2. From what I've seen, there is no way to cause it to recursively look at the tree. Realistically, I probably only need a 2 level hierarchy, but even that doesn't seem to work.

I'm attempting to work through the Custom UserDetailsContextManager to see if I can iterate over the initial results and re-query LDAP by group, but I thought I'd see if there was an easier/better way.

4

2 回答 2

1

您可能已经看到了,但这是来自文档:

// 如果您不想支持组成员递归(组中的组),请使用以下设置 // grails.plugins.springsecurity.ldap.authorities.groupSearchFilter = 'member={0}' // Active Directory 特定

// 如果您希望支持以组为成员的组(递归组),请使用以下 grails.plugins.springsecurity.ldap.authorities.groupSearchFilter = '(member:1.2.840.113556.1.4.1941:={0})' // Active Directory 特定

http://grails-plugins.github.com/grails-spring-security-ldap/docs/manual/guide/2.%20Usage.html

于 2012-12-04T04:48:59.453 回答
0

Oracle OID 具有用于遍历层次结构的特定于产品的扩展,称为CONNECT_BY,它具有 LDAP OID 2.16.840.1.113894.1.8.3。您可以将此添加为请求控件,以要求服务器根据您指定的属性连接/遵循层次结构。这可以使用 Java LDAP 客户端程序或使用类似 OpenLDAPldapsearch的程序来完成,尽管设置有点棘手。

如果您想使用 Java 来遵循层次结构,此页面包含一个示例程序,该示例程序显示了如何设置所需的javax.naming.ldap.Control实现类,在本例中名为ConnectByControl.

您也可以使用 执行这种分层搜索ldapsearch,但它需要一些准备和对所需控制值的隐含理解,因为值是连接然后进行 base64 编码的。该值分为两部分 - 跟随我的深度(0=无限),后跟连接属性名称(在这种情况下,uniquemember是所需的名称)。将查询中的 baseDN 设置为要开始分层搜索的条目。

ldapsearch -H ldap://myoidserver.mycompany.com:389 -e 2.16.840.1.113894.1.8.3=MBECAQAEDHVuaXF1ZW1lbWJlcg== -b cn=some_group_containing_groups_nested_by_uniquemember,cn=some_groups,dc=mycompany,dc=com "(objectClass=*)" dn uniquemember

-e 2.16.840.1.113894.1.8.3=添加CONNECT_BY请求控件。对于上述深度和属性名称,值MBECAQAEDHVuaXF1ZW1lbWJlcg==是 ASN.1 BER 编码然后是 base64 编码值。0uniquemember这将首先打印dnforcn=some_group_containing_groups_nested_by_uniquemember,...及其直接 (user) uniquemember,然后每个都uniquemember将被“连接”或跟随。如果该条目本身具有一组uniquemember,即它是一个嵌套组,则该过程将继续,直到到达没有嵌套uniquemembers 的叶/用户条目。

于 2016-06-28T00:53:23.717 回答