Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory IsInRole因“的名称”而不工作;角色“;_Azure Active Directory_Asp.net Identity - Fatal编程技术网

Azure active directory IsInRole因“的名称”而不工作;角色“;

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

我有一个ASP.Net核心web api。我有一个声明,其中用户具有角色“Admin”。如果我使用字符串值“roles”显式检查它,我将得到正确的值:

但是,我无法使用这些工具:

[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;