ADFS - 如何具体阐述团体索赔

ADFS - 如何具体阐述团体索赔

如何指定在 ADFS 身份验证中查找并返回一组特定的组,而不是在响应消息中搜索并返回所有用户的组?

这是对 Jim B 对此问题的回答的回应:在 ADFS 中获取嵌套用户组

Jim 说:“你应该具体说明你正在寻找的群组,而不是返回所有群组,除了服务器上的安全和性能问题之外,返回的大量群组可能会导致你的应用程序爬行。 – Jim B 2015 年 8 月 11 日 18:25 “

答案1

首先了解一下声明规则的工作原理可能是一个好主意。我发现以下技术文章非常有帮助:

AD FS 2.0 声明规则语言入门

了解 AD FS 2.0 及更高版本中的声明规则语言

简而言之,您最终将各种声明规则串联在一起,以“存储”查询数据,然后在实际使用结果组“发出”声明之前对数据进行调整/过滤。

以下是我们在自己的环境中使用的示例。对于这个特定的依赖方,我们希望返回所有以“myapp.”开头的组成员身份,包括嵌套组。

  • 规则 1:获取用户的 DN
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"] => add(store = "Active Directory", types = ("http://contoso.com/UserDN"), query = ";distinguishedName;{0}", param = c.Value);
  • 规则 2:使用成员属性获取所有嵌套组 CN
c1:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
 && c2:[Type == "http://contoso.com/UserDN"]
 => add(store = "Active Directory", types = ("http://schemas.xmlsoap.org/claims/Group"), query = "(member:1.2.840.113556.1.4.1941:={1});cn;{0}", param = c1.Value, param = c2.Value);
  • 规则 3:使用正则表达式过滤结果组
c:[Type == "http://schemas.xmlsoap.org/claims/Group", Value =~ "(?i)^myapp\."]
 => issue(claim = c);

相关内容