WSO2 Identity中XACML角色匹配规则不生效问题求助
问题排查与修复
你的XACML策略未触发Permit规则的核心原因是角色属性的类别指定错误,导致引擎无法从用户主体中匹配到角色声明。
问题分析
在你的Permit规则中,<AttributeDesignator>的Category被设置为urn:oasis:names:tc:xacml:3.0:attribute-category:resource(资源类别),但http://schemas.microsoft.com/ws/2008/06/identity/claims/role是**用户主体(Subject)**的属性,不属于资源属性范畴。XACML引擎会在错误的属性类别中查找角色,自然无法匹配到SAML响应中携带的用户角色,最终导致Permit规则不生效,执行到后续的Deny规则。
修复方案
将<AttributeDesignator>的Category修改为用户主体对应的类别urn:oasis:names:tc:xacml:1.0:subject-category:access-subject,修正后的规则代码如下:
<Rule Effect="Permit" RuleId="permit_by_claims"> <Condition> <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-at-least-one-member-of"> <AttributeDesignator AttributeId="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" Category="urn:oasis:names:tc:xacml:1.0:subject-category:access-subject" DataType="http://www.w3.org/2001/XMLSchema#string" MustBePresent="false"></AttributeDesignator> <Apply FunctionId="urn:oasis:names:tc:xacml:1.0:function:string-bag"> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">AG-ROLE-STAFF</AttributeValue> <AttributeValue DataType="http://www.w3.org/2001/XMLSchema#string">AG-ROLE-FACULTY</AttributeValue> </Apply> </Apply> </Condition> </Rule> <Rule Effect="Deny" RuleId="deny_others"></Rule>
验证逻辑
由于你的策略使用first-applicable规则组合算法:
- 修正后,XACML引擎会从用户主体属性中读取角色列表,匹配到
AG-ROLE-STAFF后触发Permit规则,直接返回允许访问的结果,不会执行后续的Deny规则。 - 如果用户没有任何匹配的角色,才会执行Deny规则,符合你的预期需求。
内容的提问来源于stack exchange,提问作者William A. Staffen
相关产品推荐
相关产品推荐

