正在使用JWT检索Azure AD组信息

本文关键字:Azure AD 信息 检索 JWT | 更新日期: 2023-09-27 18:29:49

我有需要Azure AD承载身份验证的API。

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

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

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

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

正在使用JWT检索Azure AD组信息

最近,您可以使用角色声明和/或组声明来执行此操作。如果您有一个受承载身份验证保护的web API(如这里的示例),您可以配置API,使访问令牌包含组和/或角色声明。

OWIN中间件将读取JWT承载令牌中的声明,并在System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler(源)中用适当的声明填充ClaimsIdentity

要将API配置为接收组声明,您需要编辑值为"All""SecurityGroups"(分别包括或排除通讯组列表)的应用程序清单的"groupMembershipClaims"属性,如本示例所示,该示例使用组声明将基于角色的安全性应用于使用[Authorize]标记的web应用程序。

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

new WindowsAzureActiveDirectoryBearerAuthenticationOptions  
{  
   ...
   TokenValidationParameters = new TokenValidationParameters {  
       RoleClaimType = "roles",  
   },  
   ...  
}