【问题标题】:wso2 is secondary user store authenticationwso2 是二级用户存储认证
【发布时间】:2016-07-28 13:54:36
【问题描述】:

我在 Debian 上有一个 wso2 is 5.1.0 server runign。我有一个简单的 servlet,它使用 Oauth2 进行身份验证,并且与主商店中的用户完美配合。

我创建了一个指向 openldap 服务器的辅助存储。我有一些用户和组,从 IS 可以正确看到。我看到当我尝试查看用户配置文件时出现以下错误:

Error while loading user profile metadata

但是当我尝试使用 ldap 服务器中的用户进行身份验证时,我收到了登录失败错误。我尝试同时使用用户名、域/用户名和用户名@DOMAIN,但都没有成功。

我开始认为这可能与 Calim 配置有关,因为不同商店中的用户具有不同的值,但我不知道如何解决。

关于我做错了什么有什么想法吗?

更新:

这就是我定义二级商店的方式。

<?xml version="1.0" encoding="UTF-8"?><UserStoreManager class="org.wso2.carbon.user.core.ldap.ReadWriteLDAPUserStoreManager">
      <Property name="ConnectionURL">ldap://xxxx:389</Property>
      <Property name="ConnectionName">cn=admin,dc=xx,dc=xx</Property>
      <Property encrypted="true" name="ConnectionPassword">xxxx</Property>
      <Property name="UserSearchBase">ou=users,dc=nextel,dc=es</Property>
      <Property name="UserEntryObjectClass">inetOrgPerson</Property>
      <Property name="UserNameAttribute">cn</Property>
      <Property name="UserNameSearchFilter">(&amp;(objectClass=person)cn=?))</Property>
      <Property name="UserNameListFilter">(objectClass=person)</Property>
      <Property name="UserDNPattern"/>
      <Property name="DisplayNameAttribute"/>
      <Property name="Disabled">false</Property>
      <Property name="ReadGroups">true</Property>
      <Property name="WriteGroups">true</Property>
      <Property name="GroupSearchBase">ou=groups,dc=xx,dc=xx</Property>
      <Property name="GroupEntryObjectClass">groupOfNames</Property>
      <Property name="GroupNameAttribute">cn</Property>
      <Property name="GroupNameSearchFilter">(&amp;(objectClass=groupOfNames)(cn=?))</Property>
      <Property name="GroupNameListFilter">(objectClass=groupOfNames)</Property>
      <Property name="RoleDNPattern"/>
      <Property name="MembershipAttribute">member</Property>
      <Property name="MemberOfAttribute"/>
      <Property name="BackLinksEnabled">false</Property>
      <Property name="UserNameJavaRegEx">[a-zA-Z0-9._-|//]{3,30}$</Property>
      <Property name="UserNameJavaScriptRegEx">^[\S]{3,30}$</Property>
      <Property name="UsernameJavaRegExViolationErrorMsg">Username pattern policy violated.</Property>
      <Property name="PasswordJavaRegEx">^[\S]{5,30}$</Property>
      <Property name="PasswordJavaScriptRegEx">^[\S]{5,30}$</Property>
      <Property name="PasswordJavaRegExViolationErrorMsg">Password pattern policy violated.</Property>
      <Property name="RoleNameJavaRegEx">[a-zA-Z0-9._-|//]{3,30}$</Property>
      <Property name="RoleNameJavaScriptRegEx">^[\S]{3,30}$</Property>
      <Property name="SCIMEnabled">false</Property>
      <Property name="BulkImportSupported">true</Property>
      <Property name="EmptyRolesAllowed">true</Property>
      <Property name="PasswordHashMethod">PLAIN_TEXT</Property>
      <Property name="MultiAttributeSeparator">,</Property>
      <Property name="MaxUserNameListLength">100</Property>
      <Property name="MaxRoleNameListLength">100</Property>
      <Property name="kdcEnabled">false</Property>
      <Property name="defaultRealmName">WSO2.ORG</Property>
      <Property name="UserRolesCacheEnabled">true</Property>
      <Property name="ConnectionPoolingEnabled">false</Property>
      <Property name="ReadTimeout">5000</Property>
      <Property name="LDAPConnectionTimeout">5000</Property>
      <Property name="RetryAttempts">0</Property>
      <Property name="DomainName">incloudLDAP</Property>
      <Property name="Description"/>
</UserStoreManager>

我可以看到列表中的用户,甚至可以通过 WSO2 在 LDAP 上创建一个新用户,但我看不到参数。

更新:

LDAP 中的用户结构非常简单。

【问题讨论】:

    标签: authentication ldap wso2 wso2is oauth2


    【解决方案1】:

    对于身份验证问题,您需要验证“UserNameSearchFilter”属性配置是否正确。它必须映射到您的 ladp 服务器中的用户名属性。

    <Property name="UserNameSearchFilter">(&amp;(objectClass=user)(cn=?))</Property>
    

    您还可以将来自不同用户存储的属性映射到相同的 wso2 声明。在映射的属性部分使用如下内容,

    PRIMARY/attribute1;FOO/attribute2;BAR/attribute3
    

    另请参阅 - https://docs.wso2.com/display/IS510/Adding+Claim+Mapping

    【讨论】:

    • 据我了解 UserNameSearchFilter 已正确定义(请参阅更新)。我真的不明白这些声明是如何运作的。
    • 好的。假设您有两个用户商店,分别是 FOO 和 BAR。两个用户存储都保留用户的名字,但属性不同。 FOO 将名字保存在“fn”中,BAR 将其保存在“bfn”中。然后我们必须告诉身份服务器,如果您要从 FOO 获取名字,请使用“fn”,如果您要从 BAR 获取,请使用“bfn”。因此我们可以在映射属性部分中将该语句表示为 FOO/fn;BAR/bfn
    • 您还可以从 ldap 查看器(如 Apache Directory Studio)浏览测试用户并提供用户属性的屏幕截图吗?
    • 那么,要创建声明,我是否必须创建新的声明方言和声明? Dialect Uri 和 Claim Uri 应该是什么?
    • 您不必创建新的声明或新的声明方言。您必须根据用户存储属性为您在用户配置文件中启用的声明添加正确的映射属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 2010-12-08
    相关资源
    最近更新 更多