gpt4 book ai didi

java - 遍历 LDAP DIT 的正确方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 15:04:52 24 4
gpt4 key购买 nike

我是 LDAP 协议(protocol)和服务器的新手,所以如果我问另一个小问题,请原谅我。假设我有以下带有嵌套组的 LDAP DIT。

dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example

# Create a place where users are stored
dn: ou=Users, dc=example, dc=com
ou: Users
description: All strongbox users.
objectclass: organizationalUnit

# Create users
dn: uid=tcruise,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: tcruise
cn: Tom Cruise
mail: tcruise@example.com
givenName: Tom
surname: Cruise
userPassword: password

dn: uid=sspielberg,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: sspielberg
cn: Steven Spielberg
mail: sspielberg@example.com
givenName: Steven
surname: Spielberg
userPassword: password

# Create groups
dn: ou=Groups, dc=example, dc=com
ou: Groups
description: Base group organization unit.
objectClass: organizationalUnit

# Employees
dn: ou=Employees, ou=Groups, dc=example, dc=com
ou: Employees
cn: Employees
description: All employees
objectClass: groupOfUniqueNames
uniqueMember: cn=NULL

# Employees (Actors)
dn: ou=Actors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Actors
cn: Actors
description: All actors
objectClass: groupOfUniqueNames
uniqueMember: uid=tcruise,ou=Users,dc=example,dc=com

# Employees (Directors)
dn: ou=Directors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Directors
cn: Directors
description: All directors
objectClass: groupOfUniqueNames
uniqueMember: uid=sspielberg,ou=Users,dc=example,dc=com

示例中的用户可以分配到多个组,每个组都有特定的授权级别。因此,我需要获取用户分配到的所有组及其父组(即tcruise - Actors,Employees)。目前我找不到解决此问题的任何示例。我想到的解决方案是:

  1. 向数据库发送查询,通过执行 (&(objectclass=groupOfUniqueNames)(uniqueMember=uid=sspielberg,ou=Users,dc=example,dc=com))
  2. 解析组dn(即按,分割并删除数组中的第一条记录)
  3. parentGroup objectClass == groupOfUniqueNames时查找父项

尽管这可能有效,但我认为这是不对的。我想知道是否有更好的方法来达到相同的结果?在这种情况下,有什么被认为是最佳实践的东西吗?它可以在大多数 LDAP 服务器实现中发挥作用(AD 除外,因为他们有解决这个问题的方法)?此外,您能否为我提供一个简单的示例代码或包含此问题的可能解决方案的链接?

最佳答案

如果用户是多个组的成员,则应通过组的“uniqueMember”属性中其 DN 的外观在每个组中直接表示该用户。这也适用于家长团体。不要使用类似结构的 DIT 来表达一组组,从而使您的生活变得复杂。因此,您所需要的只是列表中的 (1)。

或者,Employee应该是一组组,其成员应该是Director、Actor等,因此当您检索用户的直接成员身份(例如Actor)时,您可以开始递归操作来查找这些组所属的组,例如 Employee,添加它们,冲洗并重复。这可以用大约五行代码完成。

关于java - 遍历 LDAP DIT 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22133300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com