我继承了一个ADFS设置,其中包含一些自定义声明规则,这些规则根据使用特定前缀命名的组中的成员资格来分配SAML角色。
第一个检索所有组并填充角色:
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname",
Issuer == "AD AUTHORITY"]
=> add(
store = "Active Directory",
types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/role"),
query = ";tokenGroups;{0}",
param = c.Value);
第二个过滤器仅列出具有所需前缀的过滤器:
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/role",
Value =~ "(?i)^prefix.*"]
=> issue(claim = c);
但是,如果用户只属于其中一个前缀组,而不返回任何角色,则此操作无效。如果它们被添加到具有相同前缀的第二个组,则两者都返回。
我对DSL的索赔规则并不过分熟悉,但这似乎与我见过的例子相同。如果只找到一个匹配组,有没有办法让它返回一个角色列表?