Web 的 Azure AD 应用程序角色 Api
Azure AD Application Roles for Web Api
我已经使用 Azure AD 保护了一个 Web api 2 项目。这使用 [Authorize] 属性非常有效,但我无法让它与角色一起使用。我已将以下内容添加到应用程序清单中:
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "Access to example controller",
"displayName": "Example",
"id": "76d4bbb5-24c1-45ad-9446-cc360d7bd012",
"isEnabled": "true",
"origin": "Application",
"value": "example"
}
]
并将此属性添加到我的 api 控制器:[Authorize(Roles="example")]。如果我删除此属性并调用我的 api 此声明包含在 ClaimsPrincipal.Current 中:
{http://schemas.microsoft.com/ws/2008/06/identity/claims/role: example}
但这不足以让我的应用程序在使用角色 header 时进行身份验证。任何帮助将不胜感激。
事实证明令牌是 SAML 令牌,而不是 JWT。所以为了让它工作,我只需要在我的 TokenValidationParameters
中设置它
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",
}
你的 ConfigureAuth 函数应该是这样的
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"
}
});
}
然后您可以将 Authorize 属性添加到您的 api as
[Authorize(Roles = "example")]
我已经使用 Azure AD 保护了一个 Web api 2 项目。这使用 [Authorize] 属性非常有效,但我无法让它与角色一起使用。我已将以下内容添加到应用程序清单中:
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "Access to example controller",
"displayName": "Example",
"id": "76d4bbb5-24c1-45ad-9446-cc360d7bd012",
"isEnabled": "true",
"origin": "Application",
"value": "example"
}
]
并将此属性添加到我的 api 控制器:[Authorize(Roles="example")]。如果我删除此属性并调用我的 api 此声明包含在 ClaimsPrincipal.Current 中:
{http://schemas.microsoft.com/ws/2008/06/identity/claims/role: example}
但这不足以让我的应用程序在使用角色 header 时进行身份验证。任何帮助将不胜感激。
事实证明令牌是 SAML 令牌,而不是 JWT。所以为了让它工作,我只需要在我的 TokenValidationParameters
中设置它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",
}
你的 ConfigureAuth 函数应该是这样的
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"
}
});
}
然后您可以将 Authorize 属性添加到您的 api as
[Authorize(Roles = "example")]