用户组通过ADFS上的OpenID Connect声明为声明

问题描述 投票:1回答:2

我需要帮助来弄清楚如何通过ADFS(Windows Server 2016)上的OpenID Connect获取用户指定的组。我目前能够对用户进行身份验证并获取包含access_token的用户信息。当我检查JWT令牌时,我可以看到那里的所有默认声明。我想要的是将所有用户分配的系统组作为字符串数组添加到声明中,但我不知道如何实现这一点。 ADFS和Windows Server是一个野兽,谷歌的所有搜索结果并没有引导我朝着正确的方向发展。我找到的所有文章都有点无用,因为如果你没有在整个ADFS-shebang接受教育,他们要么在步骤中不完整,要么难以遵循。

我已经被困在这个问题上几天了,需要一些帮助,希望有人知道这个。

到目前为止我做了什么:

  1. 我已经向ADFS添加了一个应用程序组,其中包含“服务器应用程序”和“Web API”。
  2. 我添加了一个名为Admin的用户组,并将其分配给名为max的用户。
  3. 我可以通过ADFS登录OpenID Connect并从userinfo-endpoint获取用户信息。
  4. 我已经能够解码access_token以访问声明。

我目前正在使用范围“openid”,“email”和“profile”进行身份验证。

openid-connect adfs
2个回答
3
投票

我们只是把一切都搞定了所以我只是想我会分享我们做了什么,如果有人想做我们做的事情。

先决条件

为了能够执行以下步骤,您需要启用Windows Server 2016或更高版本,并启用“Active Directory联合身份验证服务(ADFS)”功能。

将OpenID Connect配置添加到ADFS

  1. 打开位于服务器管理器右上角“工具”菜单下的“AD FS管理”工具。
  2. 选择左侧栏中的“应用程序组”文件夹项。
  3. 单击右侧边栏中的“添加应用程序组...”。
  4. 为应用程序组命名,例如“OpenID Connect”
  5. 选择“访问Web API的服务器应用程序”列表项,然后单击“下一步”。
  6. 将客户端标识符复制并粘贴到文本文件中以供以后使用。
  7. 输入您的身份验证“重定向URI”,然后单击“下一步”。
  8. 勾选“生成共享密钥”框。将Secret复制并粘贴到文本中以与您的应用程序一起使用。点击下一步。
  9. 粘贴并添加客户端标识符(从步骤6开始)作为“标识符”。点击下一步。
  10. 选择您要使用的访问控制策略,然后单击“下一步”。
  11. 确保勾选“openid”旁边的框。
  12. 单击底部的“新范围...”按钮,并将其命名为“allatclaims”,然后单击“确定”。需要此范围来提供声明等附加信息,例如用户组。
  13. 完成向导。

配置OpenID Connect以提供用户组作为声明

  1. 打开位于服务器管理器右上角“工具”菜单下的“AD FS管理”工具。
  2. 选择左侧栏中的“应用程序组”文件夹项。
  3. 双击前面添加的组,然后双击“Web API”应用程序。
  4. 选择名为“Issuance Transform Rules”的选项卡。
  5. 单击底部的“添加规则...”按钮。
  6. 选择“将LDAP属性作为声明发送”,然后单击“下一步”。
  7. 为规则指定名称,例如“角色”。
  8. 选择“Active Directory”作为“属性存储”。
  9. 在下表中,在第一列中选​​择“Token-Groups Unqualified Names”,并在第二列中键入“roles”。

配置OpenID Connect以提供特定用户组作为声明

  1. 打开位于服务器管理器右上角“工具”菜单下的“AD FS管理”工具。
  2. 选择左侧栏中的“应用程序组”文件夹项。
  3. 双击前面添加的组,然后双击“Web API”应用程序。
  4. 选择名为“Issuance Transform Rules”的选项卡。
  5. 删除您可能已添加的所有规则。
  6. 单击底部的“添加规则...”按钮。
  7. 选择“使用自定义规则发送声明”,然后单击“下一步”。
  8. 将规则命名为“StoreRoles”,并将以下内容粘贴到“自定义规则”字段中: c:[Type ==“http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname”,Issuer ==“AD AUTHORITY”] => add(store =“Active Directory”,types =(“roles”),query =“; tokenGroups; {0}”,param = c.Value);
  9. 单击“完成”并添加另一个规则。
  10. 再次选择“使用自定义规则发送声明”,然后单击“下一步”。
  11. 将此规则命名为“IssueRoles”,并将以下内容粘贴到“自定义规则”字段中: c:[Type ==“roles”,Value =〜“^ Prefix。+”] => issue(claim = c);
  12. 包含//"^Prefix.+"//的部分是一个正则表达式,用于过滤作为声明的一部分发送的窗口组。在这种情况下,我们只接受以“前缀”开头的窗口组。调整此项以满足您的需求。
  13. 点击完成。

0
投票

您可以使用Web浏览器访问Web应用程序。

这使您可以访问声明规则 - 您的示例中的Web API也是如此。

然后使用带有“令牌组”选项之一的LDAP规则,例如“不合格”并将其映射为“角色”类型。

这会将所有组添加到令牌中,每个组一个角色声明。

© www.soinside.com 2019 - 2024. All rights reserved.