Azure AD:如何将安全组和应用程序角色加入访问令牌

时间:2021-03-26 12:52:31

标签: azure-active-directory azure-web-app-service asp.net-core-webapi access-token azure-api-apps

我面临的情况是我的 .NET Core 应用程序 (Azure Web API) 将通过两种方式访问​​:

  • client_credentials 流程
  • 委派权限(用户)流程

我正在使用 Microsoft Identity Web 在中间件级别通过 AD 授权和验证请求。然后我想在我的控制器方法中做额外的授权来检查以下内容:

  1. 如果是应用程序调用(客户端凭据),请检查提供的access_token 是否包含与应用程序注册中定义的应用程序角色匹配的特定角色声明 -> 应用角色
  2. 如果是登录用户调用,请检查提供的access_token是否包含在 Azure AD 中分配给该用户的特定 AD 组(安全组)。

流程 #1 有效,但如果我通过点击令牌配置 -> 添加组声明 -> 安全组 -> 作为访问令牌中的角色声明发出组 来启用流程 #2,那么应用程序角色在访问令牌内的客户端凭据流中不再可用(如下面的屏幕截图所示),大概是因为它用安全组(应用程序不存在)覆盖了角色声明。

这样做的正确方法是什么,或者以不同的方式实现等效的情况? 要求是区分应用程序 A 可以调用的控制器方法访问,例如一个只读端点 1,但不能调用写端点 2,而应用程序 B 可以调用写端点 2。同样的区分也应该对基于 AD 组的用户进行。

access_token

1 个答案:

答案 0 :(得分:0)

您可以在您的令牌中include a groups claim。您只需要修改应用程序清单中的“groupMembershipClaims”字段:

"groupMembershipClaims": "SecurityGroup"

然后令牌将包含用户所属的组的 ID,如下所示:

{
  "groups": ["{group_id}"]
}

此方法不会覆盖 roles 声明。因此,对于委派权限(用户)流程,您现在需要改为检查 groups 声明。