LDAP 授权

Posted

技术标签:

【中文标题】LDAP 授权【英文标题】:LDAP authorization 【发布时间】:2011-09-08 21:59:21 【问题描述】:

我开始使用 LDAP 为一些现有系统实现授权和身份验证机制。在开发阶段,我面临一个艰难的设计决策:用户角色应该存储在哪里?

如果我使用 RDBMS,看起来会有三个表:userroleuser_role 来映射角色和用户。

请提出可用的解决方案。我考虑将用户角色存储在 DB 中,将用户存储在 LDAP 中,但不确定这是否是最佳解决方案。我使用 JBoss 作为我的应用服务器。

【问题讨论】:

【参考方案1】:

从架构的角度来看,您有多种解决方案。这是一个将所有数据保存到目录中的解决方案。

在您的目录中,您可以使用具有“组”含义的类中的对象编码您的“角色”,例如groupOfNamesgroup(取决于您的目录)。用户可分辨名称 (DN) 将它们编码在这些对象的多值属性中(通常为 member)。作为回报,“角色”对象 DN 可以编码在用户对象的多值属性中(例如:memberof

如果您的目录支持参照完整性,它可以充当系统目录。然后membermemberOf 属性可以由目录本身管理。这意味着如果您将用户从组织单位移动到另一个组织单位,目录将刷新用户所属的“角色”对象的member 属性。

在另一种情况下(没有引用完整性),您的应用程序必须管理属性完整性。

虽然很短,但希望对您有所帮助。


编辑

我向您推荐 Apache Directory Studio,这是(对我而言)最好的 LDAP 浏览器之一。该工具将允许您查看您的目录并更友好地学习 LDAP。使用此工具,我向您展示了 ADAM(Active Directory 应用程序模式)Microsoft 的免费目录编码“角色”的方式

在第一张图片中,您可以看到 AdminAdam 是管理员组的成员:

在第二张图片中,您可以在用户 adminAdam 的属性 memberof 中看到该组的存在。

ADAM 支持参照完整性。

【讨论】:

太棒了。角色的权限如何?我必须以同样的方式跟随。我担心我会采取非常困难的结构。你怎么看?再次感谢!

以上是关于LDAP 授权的主要内容,如果未能解决你的问题,请参考以下文章

使用 CAS 进行身份验证和 LDAP 进行授权的 Spring 项目

Spring Security - LDAP 身份验证和数据库授权

Shiro LDAP 授权配置

Apache Shiro - 用于身份验证和属性的 LDAP/用于授权的 Ini

使用 Ldap 进行春季授权和角色管理

Confluence 6 用户目录图例 - 使用 LDAP 授权的内部目录