wso2 是 5.0 SP1 区分大小写吗?

Is wso2 is 5.0 SP1 case sensitive?

我们使用的是WSO2 Is 5.0 SP1。我们已经配置了 ReadOnly LDAP 并且还使用了身份服务器的授权功能。我们在 WSO2 IS 上定义的 XACML 策略从分配给用户的角色中派生出它的权利。我们的观察是 WSO2 IS 对用户名进行了实际匹配,即它的大小写 sensitive.If 我们以与 WSO2 用户列表中可用的相同大小写传递用户名 returns 适当的权利。 WSO2 Is 5.0 SP1 中是否有相同的修复程序?任何解决方法也会有所帮助。

<Policy xmlns="urn:oasis:names:tc:xacml:3.0:core:schema:wd-17" PolicyId="AdministratorPolicy" RuleCombiningAlgId="urn:oasis:names:tc:xacml:3.0:rule-combining-algorithm:permit-overrides" Version="1.0">
<Target></Target>
<Rule Effect="Permit" RuleId="Rule1">
  <Condition>
     <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:and">
        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of">
           <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag">
              <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Test</AttributeValue>
          </Apply>
           <AttributeDesignator AttributeId="urn:oasis:names:tc:xacml:1.0:resource:resource-id" Category="urn:oasis:names:tc:xacml:3.0:attribute-category:resource" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
        </Apply>
        <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-is-in">
           <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">Internal/Administrator</AttributeValue>
           <AttributeDesignator AttributeId="http://wso2.org/claims/role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="true"></AttributeDesignator>
        </Apply>
     </Apply>
  </Condition>
</Rule>
Rule Effect="Deny" RuleId="Rule2"></Rule>
 </Policy>        

提前致谢, 喜乐

我认为这种行为的发生是因为您编写 xacml 策略的方式。

您是否使用 urn:oasis:names:tc:xacml:1.0:function:string-equal 来匹配 xaml 策略中的用户名?

如果是这样,请尝试 urn:oasis:names:tc:xacml:3.0:function:string-equal-ignore-case 而不是上面的方法。它应该可以解决问题。


编辑:使用更新的问题 XACML 策略,问题似乎是 XACML 引擎在没有从正确的大小写的主题中获取用户名时不会检索角色。

也就是说,如果用户名大小写不正确,默认 PIP 不会 return 角色。

从这个角度思考,来回答你原来的问题

wso2 是 5.0 SP1 区分大小写吗?

对于 usernames\role-names 区分大小写,如果 Identity Server 继承自它所插入的底层用户存储。如果您将 IS 连接到 Active Directory,通常 usernames\rolenames 不区分大小写。如果您在 Oracle 用户存储上部署 IS,通常 usernames\rolenames 会以区分大小写的方式进行处理。


解决方案

但更具体地说,如果您想检索(内部)角色列表而不考虑用户名的大小写,则更具体地说是针对您的情况。有一份关于此行为的报告 issue 并且 Identity Server 5.0.0 确实包含这些修复。所以你可以尝试关注,

  1. 打开 <IS_HOME>/repository/conf/user-mgt.xml 文件。
  2. <UserManager>/<Realm>/<Configuration>标签下添加GetRoleListOfInternalUserSQL属性,如下所示,

    <UserManager>
       <Realm>
          <Configuration>
            ...
            <Property name="GetRoleListOfInternalUserSQL">
                SELECT UM_ROLE_NAME FROM UM_HYBRID_USER_ROLE, UM_HYBRID_ROLE WHERE UPPER(UM_USER_NAME)=UPPER ( ? ) AND UM_HYBRID_USER_ROLE.UM_ROLE_ID=UM_HYBRID_ROLE.UM_ID AND UM_HYBRID_USER_ROLE.UM_TENANT_ID=? AND UM_HYBRID_ROLE.UM_TENANT_ID=? AND UM_HYBRID_USER_ROLE.UM_DOMAIN_ID=(SELECT UM_DOMAIN_ID FROM UM_DOMAIN WHERE UM_TENANT_ID=? AND UM_DOMAIN_NAME=?)
            </Property>
          </Configuration>
         ...
       </Realm>
    <UserManager>
    
  3. 重启服务器

现在,您的政策应该针对用户名的任何情况按预期进行评估