我想在我们的Web API中基于Azure AD应用程序角色的用户授权,但是即使我可以在令牌验证响应中看到它们,角色也不会转换为实际的声明 .
我可以在ClaimsPrincipal.Current.Claims列表中看到角色,但是在属性名称角色下,而不是声明架构http://schemas.microsoft.com/ws/2008/06/identity/claims/role .
我设法通过将RoleClaimType设置为"roles"来获取Authorization属性来识别角色 .
但是,如何让Azure返回角色,或者配置API来解释它们,以便HasClaim(ClaimTypes.Role,"AdminRole")返回true?
Controller.cs
[Authorize(Roles = "AdminRole")]
public IEnumerable<Item> Get()
{
var a = ClaimsPrincipal.Current.HasClaim( ClaimTypes.Role, "AdminRole" ); // false
var b = User.IsInRole( "AdminRole" ); // true
}
Startup.cs
public void ConfigureAuth( IAppBuilder app )
{
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings[ "ida:Tenant" ],
TokenValidationParameters =
new TokenValidationParameters
{
ValidAudience = ConfigurationManager.AppSettings[ "ida:Audience" ],
RoleClaimType = "roles" // makes this work: User.IsInRole( "AdminRole" )
}
} );
}
Azure Portal
-
注册了Web API和本机WPF客户端应用程序,并修改了Web Api的清单以包含几个角色 . "Azure Portal / App Registrations / Edit manifest"
-
添加/为Web Api应用程序分配了一些用户并指定了一个或多个角色 . "Azure Portal / Enterprise Applications / [Name of Application] - Users and groups"
对于所有阅读此内容的人 - 提前感谢!
1 回答
Azure AD发出的声明属于"roles"类型,您需要将RoleClaimType(在TokenValidationParameters中)设置为
roles
,然后您可以使以下验证工作: