1

我在 WAS v8.0.0.5 中使用联合存储库。该联合存储库包含一个 JDBC 存储库、3 个 Active Directory LDAP 存储库和一个基于文件的存储库。存储库被设置为一个领域和域,供 Java EE 6 企业应用程序使用。我正在实现 Java EE 6 安全性,特别是 Servlet Spec 3.0 身份验证。

在应用程序中,我可以从所有存储库中登录并验证用户身份,但是我无法获取除 JDBC 存储库之外的所有存储库的用户角色。具体来说,我的意思是使用Servelet Spec 3.0 的request.isUserInRole()。正确的组和用户出现在 WAS 的管理控制台 (VMM) 中。我正在通过 .ear 项目的 ibm-application-bnd.xml 将组映射到应用程序角色。我检查了映射的拼写/空格。一切都是正确的。我也检查了 .war 项目的 web.xml 是否有任何拼写错误。一切看起来都很好。由于 JDBC 存储库可以正常工作,因此我将其 .ear 和 .war 角色到组映射与 LDAP 映射进行了比较。

我发现如果我将特定用户映射到 ibm-application-bnd.xml 中用于 LDAP 存储库的组,则可以确认用户的角色。这表明我的 Active Directory 用户和组之间的映射配置有问题。

就配置而言,我将讨论 LDAP 存储库中的 1 个:
我在 LDAP 实体类型中定义了组,映射到对象类组;groupOfNames;groupOfUniqueNames (我认为组只是需要,但我一直在尝试任何可以解决这个问题的方法)。
PersonAccount 映射到对象类用户。
出于绝望,我还创建了一个名为 memberOf 的 Supported LDAP 属性,并将其映射到 PersonAccount 实体类型。
至于组属性定义,我将“组成员属性的名称”设置为“memberof”,并指定了“Direct”的范围。我还尝试了“memberOf”,它没有改变任何东西。

使用 Apache Directory Studio 浏览 Active Directory,我可以确认用户和组是我正在寻找的两个对象类。

有人可以解释一下我的配置有什么问题吗?

4

1 回答 1

1

我花了一段时间,但我终于弄明白了!

我需要在 ibm-application-bnd.xml 的组标签中声明一个 access-id 属性。

在 WAS 管理控制台中,点击 Security --> Security domain --> Your domain --> Expand User Realm (Customize for this domain 应该被选中) --> 然后点击 Manage users,你会看到一个列表您的所有组,无论它们是来自 JDBC 自定义用户注册表、LDAP 存储库还是平面文件存储库的组。

您想为 LDAP 存储库使用唯一名称字段。复制该名称,然后将其粘贴到您的 ibm-application-bnd.xml 中,如下所示:

<security-role name="ADMIN">
    <group name="SomeArbitraryGroupName" access-id="group:yourRealm/CN=SomeArbitraryGroupName,OU=Groups,OU=SomeDivision,OU=SomeLocatoin,o=distinguishedNameOfABaseEntry"/>
</security-role>

如果有更好的方法来完成这项任务,那就太好了。否则,我希望这篇文章能帮助其他人通过 IBM 对该主题的混淆、缺失和/或分散的文档进行清理。

于 2013-04-15T15:45:57.390 回答