首页 文章

Web API中的Azure身份验证 - 验证后缺少角色声明

提问于
浏览
2

我想在我们的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 回答

  • 2

    Azure AD发出的声明属于"roles"类型,您需要将RoleClaimType(在TokenValidationParameters中)设置为 roles ,然后您可以使以下验证工作:

    var a = ClaimsPrincipal.Current.HasClaim("roles", "AdminRole"); 
        var b = User.IsInRole("AdminRole");
    

相关问题