使用 JWT 检索 Azure AD 组信息

2023-12-03

我有需要 Azure AD 持有者身份验证的 API。

public void ConfigureAuth(IAppBuilder app)
{
   app.UseWindowsAzureActiveDirectoryBearerAuthentication(
      new WindowsAzureActiveDirectoryBearerAuthenticationOptions
      {
         // ...
      });
}

那么是否可以查询 Azure AD(可能使用图形 API)来确定调用用户的组信息?这里的最终目标是将基于角色的安全性应用于 API 方法/控制器,如下(或类似)。

[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]

此外,身份信息如何以及在何处应用于执行线程?


截至最近,您可以使用角色声明和/或组声明来执行此操作。如果您有一个受不记名身份验证保护的 Web API(例如样品在这里),您可以配置 API,以便访问令牌包含组和/或角色声明。

OWIN 中间件将读取 JWT 不记名令牌中的声明并填充ClaimsIdentity具有适当的主张,在System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler (source).

要配置您的 API 以接收团体声明,您需要编辑"groupMembershipClaims"应用程序清单的属性,值为"All" or "SecurityGroups"(分别包含或排除的分发列表),如图所示这个样本,它使用 Group Claims 将基于角色的安全性应用到使用[Authorize] tag.

要配置您的 API 以接收角色声明,您还需要编辑清单,在"appRoles"属性如图所示这个样本(链接尚未激活 - 将在接下来的几天内激活),它使用角色声明来执行相同的操作。定义应用程序角色后,您可以在 Azure 门户中或通过 GraphAPI 将用户和组分配给这些角色。请注意,因为 AAD 发出的声明属于类型"roles",您需要将 RoleClaimType 设置为:

new WindowsAzureActiveDirectoryBearerAuthenticationOptions  
{  
   ...
   TokenValidationParameters = new TokenValidationParameters {  
       RoleClaimType = "roles",  
   },  
   ...  
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JWT 检索 Azure AD 组信息 的相关文章

随机推荐