我正在研究LDAP和Java中基于角色的安全性实现。具体来说,我需要在LDAP中表示以下对象:
角色基本上是权限组,可以将它们分配给用户或一组用户。
我正在考虑在LDAP中将它们表示为:
我们的想法是让用户或组快速访问此用户或组拥有的角色列表。我知道我可以将用户和组放在角色的“成员”属性中,但是我必须扫描所有角色以找到列出此用户的角色。有没有办法在Person对象中使用类似“member”属性的东西?
通常,有没有人知道LDAP中基于角色的良好安全实现?我找不到关于这个主题的好文档或教程。我目前正在使用ApacheDS作为LDAP服务器,但我愿意接受建议。
答案 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)。 ABAC是RBAC的演变。它使用属性(有关用户,资源,上下文的标签)和策略来确定允许的内容和不允许的内容。
示例:如果PO的金额<=用户的批准限额,则部门==销售中具有角色==经理的用户可以对类型==采购订单的凭证执行操作==编辑。
您可以在NIST website上阅读有关ABAC的更多信息。
答案 2 :(得分:0)
查看Fortress。它符合ANSI RBAC INCITS 359并基于LDAP构建。源代码是开源的,您可以从此处下载包含OpenLDAP的预构建二进制文件:http://iamfortress.org/