Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.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
C# 如何从IdentityServer4授权中获取角色?_C#_Entity Framework_Identityserver4 - Fatal编程技术网

C# 如何从IdentityServer4授权中获取角色?

C# 如何从IdentityServer4授权中获取角色?,c#,entity-framework,identityserver4,C#,Entity Framework,Identityserver4,我正在使用带有IdentityServer4的EF6。一切都是数据库——用户、索赔和客户 如何将用户角色从承载令牌中转移到客户端?目前,我的测试分配了一个名为CustomerAdministrator的角色,但我无法将此角色删除 表中添加了我的CustomerAdministrator角色: 阿斯佩特罗莱姆斯 AspNetRoles AspNetUserRoles 我错过了什么? 令牌结果: { "sid": "20d62652c0504f2b521c8a7c24ee7320", "

我正在使用带有IdentityServer4的EF6。一切都是数据库——用户、索赔和客户

如何将用户角色从承载令牌中转移到客户端?目前,我的测试分配了一个名为
CustomerAdministrator
的角色,但我无法将此角色删除

表中添加了我的
CustomerAdministrator
角色:

  • 阿斯佩特罗莱姆斯
  • AspNetRoles
  • AspNetUserRoles
我错过了什么? 令牌结果:

{
  "sid": "20d62652c0504f2b521c8a7c24ee7320",
  "sub": "a997a3ad-82bd-430f-9191-5b95408967b1",
  "auth_time": 1553518560,
  "idp": "local",
  "amr": [
    "pwd"
  ],
  "name": "Bob Smith",
  "given_name": "Bob",
  "family_name": "Smith",
  "preferred_username": "bob"
}
我在堆栈溢出上找到的其他解决方案似乎是基于内存解决方案的

注意:这都是基于IdentityServer4的
组合存储
示例

在数据库中:

ApsNetRoleClaims
1 | -uudi- | role | CustomerAdministrator

ApsNetRoles
1 | -uudi- | CustomerAdministrator | CustomerAdministrator | -uuid

ApsNetUserRoles
1 | -uuid User- | -uuid RoleId- 

ClientScopes
3 | api1 | 1
4 | openid | 4
5 | profile | 4
6 | api | 4
7 | profile | 3
8 | api | 3
10 | role | 1
11 | role | 2
12 | role | 3
13 | role | 4

IdentityResources
1 | 1 | openip | Your user identifier | NULL | 1 | 0 | 1 | ...
2 | 1 | profile| You profile...       | ...  | 0 | 1 | 1 | ...
3 | 6 | role   | User Role            | Role | 1 | 1 | 1 | ...

您的意思是,您希望登录用户的角色来自客户端站点的JWT令牌吗? 如果是,您可以在Claim对象中传递角色名称或角色id

            List<string> roleNames = _userManager.GetRolesAsync(user).Result.ToList();
            string userRoles = "";
            foreach(string rname in roleNames)
            {
                if (userRoles.Trim().Length == 0)
                    userRoles = rname;
                else
                    userRoles = userRoles + "," + rname;
            }
            var claims = new List<Claim>
            {
                new Claim("UserId", user.Id),
                new Claim("UserName", user.UserName),
                new Claim("UserRoles", userRoles),
                new Claim(ClaimTypes.Role,roleNames.FirstOrDefault()),
                new Claim(ClaimTypes.Sid, user.Id)
            };           

您的意思是,您希望登录用户的角色来自客户端站点的JWT令牌吗? 如果是,您可以在Claim对象中传递角色名称或角色id

            List<string> roleNames = _userManager.GetRolesAsync(user).Result.ToList();
            string userRoles = "";
            foreach(string rname in roleNames)
            {
                if (userRoles.Trim().Length == 0)
                    userRoles = rname;
                else
                    userRoles = userRoles + "," + rname;
            }
            var claims = new List<Claim>
            {
                new Claim("UserId", user.Id),
                new Claim("UserName", user.UserName),
                new Claim("UserRoles", userRoles),
                new Claim(ClaimTypes.Role,roleNames.FirstOrDefault()),
                new Claim(ClaimTypes.Sid, user.Id)
            };           

您是否将
角色
声明类型包括在您的身份资源或受保护的资源中?使用我在数据库中添加的内容和那些表中缺少的内容选择?是否将
角色
声明类型包括在您的身份资源或受保护的资源中?使用我在数据库中添加的内容和那些表中的内容选择我错过了什么?