7

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

  • 用户
  • 企业用户组 - 人力资源、财务等。
  • 权限 - DOCUMENT_READ、DOCUMENT_MODIFY 等。
  • 角色 - 管理员、访客等。

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

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

  • 用户 - 具有 userPassword 属性的 Person 和 uidObject 类。
  • 用户组 - 用户所在的组织单元类。
  • 角色 - groupOfNames 对象类。
  • 权限 - 不确定这个,也许还有 groupOfNames 类。

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

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

4

3 回答 3

9

用户:inetOrgPerson

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

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

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

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

OpenLDAP 有一个参照完整性覆盖层,可以为您保留很多这些内容。

在 Matt Butcher 的Mastering OpenLDAP中有一些关于 LDAP 结构的很好的提示,在Howes等人的Understanding and Deploying LDAP Directory Services中有更高层次的观点。

于 2011-11-05T23:13:22.010 回答
2

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

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

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

于 2015-07-28T11:47:33.183 回答
0

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

于 2014-02-25T23:31:57.627 回答