Azure AD Application Roles for Web Api

本文关键字:Web Api for Roles AD Application Azure | 更新日期: 2023-09-27 18:34:09

I have protected a web api 2 project using Azure AD.这在使用 [Authorize] 属性时效果很好,但我无法让它与角色一起使用。我已将以下内容添加到应用程序清单中:

"appRoles": [
{
  "allowedMemberTypes": [
    "Application"
  ],
  "description": "Access to example controller",
  "displayName": "Example",
  "id": "76d4bbb5-24c1-45ad-9446-cc360d7bd012",
  "isEnabled": "true",
  "origin": "Application",
  "value": "example"
}

]

以及我的 API 控制器的此属性:[授权(角色="示例")]。如果我删除此属性并调用我的 api,则此声明将包含在 ClaimsPrincipal.Current 中:

{http://schemas.microsoft.com/ws/2008/06/identity/claims/role: example}

但这还不足以允许我的应用程序在使用角色标头时进行身份验证。任何帮助将不胜感激。

Azure AD Application Roles for Web Api

事实证明,令牌是SAML令牌,而不是JWT。因此,要使其正常工作,我只需要在我的令牌验证参数中设置它

TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters()
                {
                    // we inject our own multitenant validation logic
                    ValidateIssuer = false,
                    // map the claimsPrincipal's roles to the roles claim
                    RoleClaimType = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role",
                }

你的配置身份验证函数应该是这样的

public void ConfigureAuth(IAppBuilder app)
{
    app.UseWindowsAzureActiveDirectoryBearerAuthentication(
    new WindowsAzureActiveDirectoryBearerAuthenticationOptions
    {
        Audience = ConfigurationManager.AppSettings["ida:Audience"],
        Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
        TokenValidationParameters = new System.IdentityModel.Tokens.TokenValidationParameters
        {
            RoleClaimType = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role"
        }
    });        
}

然后,您可以将授权属性添加到您的 api 中,作为

 [Authorize(Roles = "example")]