2011-11-05 95 views
7

我正在研究LDAP和Java中基于角色的安全实现。具体而言,我有我需要在LDAP表示以下对象:LDAP中基于角色的安全实现

  • 用户的用户
  • 企业集团 - 人力资源,财务等
  • 权限 - DOCUMENT_READ,DOCUMENT_MODIFY等
  • 角色 - ADMIN,GUEST等。

角色基本上是权限组,它们可以分配给用户或一组用户。

我想在LDAP其表示为folows的:

  • 用户 - 人与uidObject班,userPassword属性。
  • 用户组 - organizationUnit类,用户位于其下的用户为 。
  • 角色 - groupOfNames对象类。
  • 权限 - 不确定这个,也许groupOfNames 类。

想法是从用户或组快速访问该用户或组具有的角色列表。我知道我可以将用户和组放在角色的“成员”属性中,但是随后我将不得不扫描所有角色以查找哪些用户列出了该用户。有没有办法在Person对象中拥有类似“member”属性的东西?

一般来说,没有人知道LDAP中基于角色的安全实现吗?我无法找到有关此主题的良好文档或教程。我目前使用ApacheDS作为LDAP服务器,但我愿意接受建议。

回答

8

用户:为inetOrgPerson

类别:组织单位,但要注意的试图复制组织结构LDAP目录:这通常是一个错误,因为组织变化和用户组织走动。您应该考虑使用ou 属性

角色:组织角色。我使用groupOfUniqueNames作为角色组,但那是一个错误,我应该一直使用organizationalRole,以便角色只是递归的。

权限:这只是一个角色,或角色的属性。如果您使用CMA,则它们在web.xml中定义,而不是LDAP。

正如我所说的,不要试图让你的LDAP树镜像你的组织。让它镜像它自己的组织。我在任何需要的地方使用多值属性。我使用organizationalUnit主要用于LDAP本身内的图层,或者我在上面违反了我的规则;-)

OpenLDAP具有参照完整性叠加层,可以为您保留大量的这些内容。

有在在LDAP结构中的一些很好的提示由马特·布彻掌握的OpenLDAP,并在理解这一切更高层次视图和部署LDAP目录服务由豪斯

+0

谢谢,我会试试看。 ou属性是一个好主意。在我的情况下,一个人可以属于多个组织单位,所以我不确定哪个更好 - 具有多个属性或可能使groupOfNames也是。 – user1031054

+0

@ user1031054请参阅编辑。 – EJP

+0

好ldap文章:http://www.zytrax.com/books/ldap/ – cleverpig

0

退房堡垒。它符合ANSI RBAC INCITS 359标准,并构建在LDAP上。源代码是开源的,您可以从这里下载包含OpenLDAP的预构建二进制文件:http://iamfortress.org/

2

另一个选项:检查基于属性的访问控制()。 ABAC是RBAC的演变。它使用属性(这是关于用户,资源,上下文的标签)和策略来确定什么是允许的,哪些不是。

示例:如果采购订单的金额为< =用户的审批限额,则在department == sales中具有角色==经理的用户可以对类型为==采购订单的文档执行操作==编辑。

您可以在NIST website上阅读关于ABAC的更多信息。