Как я могу получить роль от авторизации IdentityServer4? - PullRequest
1 голос
/ 25 марта 2019

Я использую EF6 с IdentityServer4. Все это база данных - пользователи, претензии и клиенты.

Как я могу получить Роли пользователя из моего токена на предъявителя клиентам? В настоящее время у меня есть пользователь с ролью с именем CustomerAdministrator, назначенной для моего теста, но я не могу получить эту роль.

Моя CustomerAdministrator роль была добавлена ​​в таблицы:

  • AspNetRoleClaims
  • 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"
}

Другие решения, которые я нашел в Stack Overflow, похоже, основаны на решениях для памяти.

Примечание: все это основано на примере Combined_AspId_and_EFStorage для 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 | ...

1 Ответ

0 голосов
/ 26 марта 2019

Вы хотите сказать, что вы хотите войти в систему как пользователь JWT-Token на сайте клиента?Если да, вы можете передать имя роли или идентификатор роли в объектах заявки.

            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)
            };           

С сайта клиента по угловой

OnSubmit(userName,password){
  const jwtHelper = new JwtHelperService();
  this.accountService.userAuthentication(userName,password).subscribe((data : any)=>{
  var decodedToken=jwtHelper.decodeToken(data.toString());
  var userRoles = decodedToken.UserRoles;
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...