Web API 中的 Azure 身份验证 - 验证后角色声明丢失

Mat*_*asK 5 c# asp.net-mvc azure azure-active-directory

我希望将用户授权基于 Web API 中的 Azure AD 应用程序角色,但这些角色不会转换为实际声明,即使我可以在令牌验证响应中看到它们。

我可以在ClaimsPrincipal.Current.Claims列表中看到角色,但在属性名称Roles下,而不是声明架构http://schemas.microsoft.com/ws/2008/06/identity/claims/role。

我已设法通过将RoleClaimType设置为"roles"来获取 Authorization 属性来识别角色。

但是如何让 Azure 返回角色,或者配置 API 来解释它们,以便HasClaim(ClaimTypes.Role, "AdminRole")返回 true?

控制器.cs

[Authorize(Roles = "AdminRole")]
public IEnumerable<Item> Get()
{
    var a = ClaimsPrincipal.Current.HasClaim( ClaimTypes.Role, "AdminRole" ); // false
    var b = User.IsInRole( "AdminRole" ); // true
}
Run Code Online (Sandbox Code Playgroud)

启动.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" )
            }
    } );
}
Run Code Online (Sandbox Code Playgroud)

Azure 门户

  • 注册了 Web API 和本机 WPF 客户端应用程序,并修改了 Web Api 的清单以包含几个角色。“Azure 门户/应用程序注册/编辑清单”
  • 向 Web Api 应用程序添加/分配了一些用户并指定了一个角色或另一个角色。“Azure 门户/企业应用程序/[应用程序名称] - 用户和组”

对于所有阅读本文的人 - 提前致谢!

Nan*_* Yu 2

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

    var a = ClaimsPrincipal.Current.HasClaim("roles", "AdminRole"); 
    var b = User.IsInRole("AdminRole"); 
Run Code Online (Sandbox Code Playgroud)