Azure active directory IsInRole因“的名称”而不工作;角色“;
我有一个ASP.Net核心web api。我有一个声明,其中用户具有角色“Admin”。如果我使用字符串值“roles”显式检查它,我将得到正确的值: 但是,我无法使用这些工具:Azure active directory IsInRole因“的名称”而不工作;角色“;,azure-active-directory,asp.net-identity,Azure Active Directory,Asp.net Identity,我有一个ASP.Net核心web api。我有一个声明,其中用户具有角色“Admin”。如果我使用字符串值“roles”显式检查它,我将得到正确的值: 但是,我无法使用这些工具: [Authorize(Roles = "Administrator, Admin")] 或 如果我使用这个: var roles = this.User.Identities.SelectMany(i => { return i.Claims
[Authorize(Roles = "Administrator, Admin")]
或
如果我使用这个:
var roles = this.User.Identities.SelectMany(i =>
{
return i.Claims
.Where(c => c.Type == "roles")
.Select(c => c.Value)
.ToList();
});
然后出现了:
roles.FirstOrDefault()
"Admin"
我猜默认值是使用“http://schemas.microsoft.com/ws/2008/06/identity/claims/role而不是ClaimType的“角色”
我的startup.cs中确实有这一点,我希望能够解决这个问题:
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
services.Configure<OpenIdConnectOptions>(AzureADDefaults.OpenIdScheme, options =>
{
options.TokenValidationParameters.RoleClaimType = "roles";
});
JwtSecurityTokenHandler.DefaultMapInboundClaims=false;
配置(AzureADDefaults.OpenIdScheme,选项=>
{
options.TokenValidationParameters.RoleClaimType=“角色”;
});
但是没有快乐
谢谢!
~john光靠这句话是不行的。从示例中,还需要设置另一个标志 //这需要在OpenIdConnectOptions之前实例化 //开始配置。 //默认情况下,索赔映射将旧格式的索赔名称映射到> //适应较旧的SAML应用程序。 // 'http://schemas.microsoft.com/ws/2008/06/identity/claims/role”“相反 //“角色”的定义 //此标志确保将根据令牌中的声明构建ClaimSideEntity声明集合
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;
这对我来说仍然是失败的。有人有什么建议吗?请告诉我们您从哪里获得角色?AAD或者你是数据库
JwtSecurityTokenHandler.DefaultMapInboundClaims = false;