LDAP为用户分配角色的最佳方式

时间:2016-06-20 05:40:37

标签: ldap openldap spring-ldap

是他们设置用户角色和权限的标准方法。

选项1: 创建组并分配成员。

我的人民dn如下。

  DN: uid=55e44a75e4b0f16711714165,ou=people,dc=cofinding,dc=com 

我为角色创建了群组。并在那个

中分配成员
DN: cn=ADMIN,ou=roles,dc=cofinding,dc=com  

并在此处添加了具有角色ADMIN的成员。大约有50,000名成员加入了ADMIn角色。

选项2:在人员中添加自定义值角色.e.g。我创建了dn as user_role

DN: uid=55e44a75e4b0f16711714165,ou=people,dc=cofinding,dc=com

在人们中,我们可以添加user_role = ADMIN,MASTER_ADMIN

是他们的任何其他选择或标准做法。因为角色在任何身份验证过程中都非常重要。

2 个答案:

答案 0 :(得分:3)

首先:角色与身份验证无关,它们在授权过程中使用。当身份验证时,系统会根据一组凭据验证用户是谁;一旦建立,就会在授权过程中查询角色,以确定是否应授予用户访问某些特定资源的权限。

回答关于角色的问题:两种方式都有效。第一种方法可能是最常见的方法(大多数情况与LDAP中通常的结构方式一致。请查看groupOfNames和groupOfUniqueNames对象类来表示您的角色)。根据用例,我认为后者在许多情况下可能更实用,但你需要考虑到它不是标准的“LDAP方式”。

答案 1 :(得分:0)

另一种选择是选项#1和#2之间的混合。 您可以使用所谓的动态组或URL组来代替使用静态组(选项1):

dn: cn=ADMIN,ou=roles,dc=cofinding,dc=com
objectClass: top
objectClass: groupOfURLs
cn: ADMIN
memberURL: ldap:///ou=people,dc=cofinding,dc=com??sub?user_role=ADMIN

memberURL是一个过滤器,用于根据特定属性值和基本DN确定哪些用户属于该组。在上面的示例中,ou=people,dc=cofinding,dc=com下具有属性user_role=ADMIN的每个用户都将自动添加到ADMIN组中。以下是管理员用户示例:

dn: uid=55e44a75e4b0f16711714165,ou=people,dc=cofinding,dc=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
cn: John Doe
sn: Doe
uid: 55e44a75e4b0f16711714165
user_role: ADMIN

通过这种方法,您可以从两个选项(#1和#2)中获得最佳效果:

  1. 您的论坛内容不会增加。
  2. 您可以查询该组以获取成员列表:

    $ ldapsearch -p 1389 -D "cn=directory manager" -w password -b   "cn=ADMIN,ou=roles,dc=cofinding,dc=com" "(objectClass=groupOfURLs)"
    dn: cn=ADMIN,ou=roles,dc=cofinding,dc=com
    cn: ADMIN
    memberURL: ldap:///ou=people,dc=cofinding,dc=com??sub?user_role=ADMIN
    member: uid=55e44a75e4b0f16711714165,ou=people,dc=cofinding,dc=com
    
  3. 您可以在搜索过滤器中使用memberOf虚拟属性:

    (memberOf=cn=ADMIN,ou=roles,dc=cofinding,dc=com)