LDAP中基于角色的安全性实现

时间:2011-11-05 12:44:21

标签: java ldap rbac apacheds

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

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

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

我正在考虑在LDAP中将它们表示为:

  • Users - 具有userPassword属性的Person和uidObject类。
  • 用户组 - organizationalUnit类,用户所在的组 位于。
  • 角色 - groupOfNames对象类。
  • 权限 - 不确定这个,也许也是groupOfNames 类。

我们的想法是让用户或组快速访问此用户或组拥有的角色列表。我知道我可以将用户和组放在角色的“成员”属性中,但是我必须扫描所有角色以找到列出此用户的角色。有没有办法在Person对象中使用类似“member”属性的东西?

通常,有没有人知道LDAP中基于角色的良好安全实现?我找不到关于这个主题的好文档或教程。我目前正在使用ApacheDS作为LDAP服务器,但我愿意接受建议。

3 个答案:

答案 0 :(得分:8)

用户:inetOrgPerson

集合:organizationalUnit,但要注意尝试在LDAP目录中复制组织结构:这通常是一个错误,因为组织会发生变化,用户会在组织中移动。您应该考虑使用ou 属性

角色:organizationalRole。我使用了一组角色作为groupOfUniqueNames,但这是一个错误,我应该继续使用organizationalRole,以便角色只是递归。

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

正如我所说,不要试图让你的LDAP树镜像你的组织。使其镜像自己的组织。我在必要时使用多值属性。我主要为LDAP本身的层使用organizationalUnit,或者我在上面违反了我的规则; - )

OpenLDAP具有参照完整性覆盖,可以为您保留很多这些。

Matt Butcher在掌握OpenLDAP 中对LDAP结构有一些非常好的提示,并且在Howes的了解和部署LDAP目录服务中有更高级别的视图 et al。

答案 1 :(得分:2)

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

示例:如果PO的金额<=用户的批准限额,则部门==销售中具有角色==经理的用户可以对类型==采购订单的凭证执行操作==编辑。

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

答案 2 :(得分:0)

查看Fortress。它符合ANSI RBAC INCITS 359并基于LDAP构建。源代码是开源的,您可以从此处下载包含OpenLDAP的预构建二进制文件:http://iamfortress.org/