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 门户
对于所有阅读本文的人 - 提前致谢!
Azure AD 发出的声明属于“角色”类型,您需要将 RoleClaimType(在 TokenValidationParameters 中)设置为roles,然后您可以使以下验证工作:
var a = ClaimsPrincipal.Current.HasClaim("roles", "AdminRole");
var b = User.IsInRole("AdminRole");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2253 次 |
| 最近记录: |