3

我正在尝试针对我们的公司 Active Directory 配置 Identity Server (4.1.0)。

我正在使用 ReadOnlyLDAPUserStoreManager 类。这是用户存储的配置:

<UserStoreManager class="org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager">
            <Property name="ReadOnly">true</Property>
            <Property name="MaxUserNameListLength">100</Property>
            <Property name="ConnectionURL">ldap://host</Property>
            <Property name="ConnectionName">ommitted</Property>
            <Property name="ConnectionPassword">xxxxxx</Property>
            <Property name="passwordHashMethod">PLAIN_TEXT</Property>
            <Property name="UserSearchBase">searchbase</Property>
            <Property name="UserNameListFilter">(objectClass=user)</Property>
            <Property name="UserNameAttribute">sAMAccountName</Property>
            <Property name="ReadLDAPGroups">true</Property>
            <Property name="GroupSearchBase">groupbase</Property>
            <Property name="GroupNameListFilter">(objectClass=group)</Property>
            <Property name="GroupNameAttribute">sAMAccountName</Property>
            <Property name="MembershipAttribute">memberOf</Property>
            <Property name="UserRolesCacheEnabled">false</Property>
            <Property name="ReplaceEscapeCharactersAtUserLogin">true</Property>
            <Property name="maxFailedLoginAttempt">0</Property> 
        </UserStoreManager>

我已经删除了特定的连接详细信息以及 UserSearchBase 和 GroupSearchBase。IS 启动成功,我可以看到列出的用户和角色。

我遇到以下问题:

  • 身份服务器未将分配的角色正确映射到用户。即使我的 AD 使用“memberOf”属性来定义组成员身份,身份服务器也没有分配给特定用户
  • 我无法使用 LDAP 存储中的用户登录身份服务器管理 UI。当我以下列方式配置领域/配置时:

    admin AD_user_name admin 每个人 jdbc/WSO2CarbonDB org.wso2.carbon.user.core.config.multitenancy.CommonLDAPRealmConfigBuilder org.wso2.carbon.user.core.config.multitenancy.CommonLDAPRealmConfigBuilder</Property-->

是否有人对与作为活动目录的只读 LDAP 存储集成有任何建议?

更新 使用 WSO2 支持,我建议大家等到 IS 4.1.1 再尝试这个特定的用例。旧版本的产品根本不能很好地工作。我会更新,因为我知道更多。

4

4 回答 4

1

我不知道 Active Directory,但是我们在 OpenLDAP 上遇到了类似的问题,我们无法列出用户的角色,原因是,我们的 LDAP 仅使用它的 UID 将用户与组相关联,例如,在角色上,属性 memberUid 是:

memberUid = alandaniel

但 WSO2 org.wso2.carbon.user.core.ldap.ReadOnlyLDAPUserStoreManager 期望的方式是:

memberUid = uid=alandaniel,ou=x,dc=y,dc=z

所以我不得不自定义 user.core 插件。而不是创建查询:

(&(objectClass=posixGroup)(memberUid=uid=alandaniel,ou=x,dc=y,dc=z))

它现在将使用

(&(objectClass=posixGroup)(memberUid=alandaniel))

所以如果你真的需要自定义它,扩展 ReadOnlyLDAPUserStoreManager 并自定义方法 getExternalRoleListOfUser(..)

*使用的版本是 WSO2 IS 4.1.0 和 WSO2 ESB 4.6.0。

于 2013-03-28T15:29:57.260 回答
0

我在最近的一次客户互动中使用了附加的配置,你可以试试这个,连接一个对 AD 有读取权限的用户吗?

此外,最新版本的 IS 现在支持多个用户商店。如果您想要一个活动商店,请务必评论默认商店。否则,您需要为每个用户存储添加一个域名(此处为 ad-domain)。

此处描述了用户存储设置:http: //docs.wso2.org/wiki/display/IS400/Configuring+User+Stores

希望这会有所帮助,伊莎贝尔。

<UserStoreManager class="org.wso2.carbon.user.core.ldap.ActiveDirectoryUserStoreManager">
<Property name="DomainName">ad-domain</Property>
<Property name="defaultRealmName">My-Realm</Property>
<Property name="kdcEnabled">false</Property>
<Property name="ConnectionURL">ldap://myserver:389</Property>
<Property name="ConnectionName">CN=yyyy,ou=xxxxx</Property>
<Property name="ConnectionPassword">xxxxxxx</Property>
<Property name="passwordHashMethod">PLAIN_TEXT</Property>
<Property name="UserSearchBase">ou=xxxx,...</Property>
<Property name="UserEntryObjectClass">user</Property>
<Property name="UserNameAttribute">sAMAccountName</Property>
<Property name="isADLDSRole">false</Property>
<Property name="userAccountControl">512</Property>
<Property name="UserNameListFilter">(objectClass=user)</Property>
<Property name="UserNameSearchFilter">(&amp;(objectClass=user)(cn=?))</Property>
<Property name="UsernameJavaRegEx">[a-zA-Z0-9._-|//]{3,30}$</Property>
<Property name="UsernameJavaScriptRegEx">^[\\S]{3,30}$</Property>
<Property name="PasswordJavaScriptRegEx">^[\\S]{5,30}$</Property>
<Property name="RolenameJavaScriptRegEx">^[\\S]{3,30}$</Property>
<Property name="RolenameJavaRegEx">[a-zA-Z0-9._-|//]{3,30}$</Property>
<Property name="ReadLDAPGroups">true</Property>
<Property name="WriteLDAPGroups">false</Property>
<Property name="EmptyRolesAllowed">true</Property>
<Property name="GroupSearchBase">ou=xxxxx</Property>
<Property name="GroupEntryObjectClass">group</Property>
<Property name="GroupNameAttribute">cn</Property>
<Property name="MembershipAttribute">member</Property>
<Property name="GroupNameListFilter">(objectcategory=group)</Property>
<Property name="GroupNameSearchFilter">(&amp;(objectClass=group)(cn=?))</Property>
<Property name="UserRolesCacheEnabled">true</Property>
<Property name="Referral">follow</Property>
<Property name="BackLinksEnabled">true</Property>
<Property name="maxFailedLoginAttempt">0</Property>
</UserStoreManager>
于 2013-03-14T10:09:08.150 回答
0

请参阅 Suresh 的以下博客文章。

http://sureshatt.blogspot.com/2012/07/how-to-connect-wso2-api-manager-to.html

它有一个使用的例子ReadOnlyLDAPUserStoreManager

我希望这会有所帮助。

谢谢。

于 2013-03-15T03:21:31.693 回答
0

更新:

我可以确认 WSO2 IS 4.1.1 解决了该问题,并且按预期工作。我得出的结论是产品 4.1.0 完全不起作用。

开发团队已经修复了这些功能中的问题,并且在最新版本中。

祝你好运。

于 2013-07-31T18:58:06.023 回答