WSO2 Identity Server - LDAP用户存储不起作用

时间:2013-03-13 17:19:56

标签: active-directory wso2

我正在尝试针对公司的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成功启动,我可以看到列出的用户和角色。

我遇到了以下问题:

  • Identity Server未正确将已分配的角色映射到用户。即使我的AD使用'memberOf'属性来定义组成员身份,Identity Server也没有分配给特定用户
  • 我无法使用LDAP商店中的用户登录Identity Server管理界面。当我按以下方式配置Realm / Configuration时:

                        管理                                               AD_user_name                          管理                                      大家                 JDBC / WSO2CarbonDB                 org.wso2.carbon.user.core.config.multitenancy.CommonLDAPRealmConfigBuilder                          org.wso2.carbon.user.core.config.multitenancy.CommonLDAPRealmConfigBuilder&LT; /地产 - &GT;             

是否有人建议与作为ACtive目录的只读LDAP存储集成?

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

4 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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>

答案 2 :(得分:0)

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

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

它有一个使用ReadOnlyLDAPUserStoreManager的例子。

我希望有所帮助。

感谢。

答案 3 :(得分:0)

<强>更新

我可以确认WSO2 IS 4.1.1解决了这个问题,这可以按预期工作。我得出的结论是4.1.0产品不能正常工作。

开发团队修复了这些功能中的问题,并在最新版本中进行了解决。

祝你好运。