我们正在使用WSO2是5.0 SP1。我们已配置ReadOnly LDAP并使用身份服务器的授权功能。我们在WSO2 IS上定义的XACML策略从分配给用户的角色派生其权利。我们的观察是WSO2 IS与用户名实际匹配,即区分大小写。如果我们在WSO2用户列表中提供的用户名相同,则返回正确的权利。在WSO2是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>
提前致谢, Cijoy
答案 0 :(得分:0)
我认为这种行为是因为您编写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不会返回角色。
想到这个角度,回答你原来的问题
wso2是否区分大小写5.0 SP1?
对于usernames \ role-names区分大小写,如果Identity Server从其插入的基础用户存储继承。如果将IS连接到Active Directory,通常用户名\ rolenames不区分大小写。如果在Oracle用户存储上部署IS,通常会以区分大小写的方式处理用户名\ rolenames。
<强>解决方案强>
但更具体地说,对于您的场景,如果您想要检索(内部)角色列表,而不管用户名是什么情况。有关此行为的报告issue,Identity Server 5.0.0确实包含这些修复。所以你可以试试,
<IS_HOME>/repository/conf/user-mgt.xml
文件。在GetRoleListOfInternalUserSQL
标记下添加<UserManager>/<Realm>/<Configuration>
属性,其值如下,
<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>
重启服务器
现在,您的政策应根据用户名
的任何情况按预期进行评估