正在使用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")]
此外,身份信息是如何以及在哪里应用于执行线程的?
最近,您可以使用角色声明和/或组声明来执行此操作。如果您有一个受承载身份验证保护的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",
},
...
}