我有需要Azure AD承载身份验证的API。
public void ConfigureAuth(IAppBuilder app)
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
// ...
});
}
是否可以查询Azure AD(可能使用Graph API)来确定主叫用户的组信息?这里的最终目标是将基于角色的安全性应用于API方法/控制器,如下所示(或类似)。
[PrincipalPermission(SecurityAction.Demand, Role = "Admin")]
此外,身份信息如何以及在何处应用于执行线程?
答案 0 :(得分:6)
截至最近,您可以使用角色声明和/或群组声明来执行此操作。如果您的网页API受到承载身份验证的保护(如sample here中所述),则可以配置API,以便访问令牌包含群组和/或角色声明。
OWIN中间件将阅读JWT持票人令牌中的声明,并在ClaimsIdentity
(source)中使用适当的声明填充System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler
。
要配置API以接收组声明,您需要编辑应用程序清单的"groupMembershipClaims"
属性,其值为"All"
或"SecurityGroups"
(分别包含或排除分发列表) )如this sample所示,它使用群组声明将基于角色的安全性应用于使用[Authorize]
标记的网络应用。
要配置您的API以接收角色声明,您还需要编辑清单,在"appRoles"
属性中定义应用程序角色,如this sample所示(链接尚未激活 - 它将在接下来的几天),它使用角色声明来做同样的事情。定义应用程序角色后,可以将用户和组分配给Azure门户中的这些角色或通过GraphAPI。请注意,因为AAD发出的声明属于"roles"
类型,您需要将RoleClaimType设置为:
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
...
TokenValidationParameters = new TokenValidationParameters {
RoleClaimType = "roles",
},
...
}