2017-02-08 11 views
0

Я новичок в Identity Server и смущен по теме Identity & Точки доступа. Я понимаю, что токены доступа предназначены для защиты ресурсов (т. Е. Web api) и что токены идентичности используются для аутентификации. Однако всякий раз, когда я звоню/подключаюсь/токен, я всегда получаю «access_token». В рамках запроса я попросил клиента, который имеет различные области и заявки.Как вы запрашиваете идентификатор идентичности (id_token) в IdentityServerr4

new Client 
      {    
       ClientId = "Tetris", 
       ClientName = "Tetris Web Api", 
       AccessTokenLifetime = 60*60*24, 
       AllowedGrantTypes = GrantTypes.ResourceOwnerPassword, 
       RequireClientSecret = false, 
       AllowedScopes = {"openid", "TetrisApi", "TetrisIdentity"} 
      } 



public static IEnumerable<ApiResource> GetApiResources() 
     { 
      return new[] 
      { 
       new ApiResource("TetrisApi", "Tetris Web API", new[] { JwtClaimTypes.Name, JwtClaimTypes.Role, "module" }) 
      }; 
     } 

     public static IEnumerable<IdentityResource> GetIdentityResources() 
     { 
      return new List<IdentityResource> 
      { 
       new IdentityResources.OpenId(), 
       new IdentityResources.Profile(), 
       new IdentityResource 
       { 
        Name = "TetrisIdentity", 
        UserClaims = 
         new[] 
         { 
          JwtClaimTypes.Name, 
          JwtClaimTypes.Role, 
          JwtClaimTypes.GivenName, 
          JwtClaimTypes.FamilyName, 
          JwtClaimTypes.Email, 
          "module", 
          "module.permissions" 
         } 
       } 
      }; 
     } 

Ниже приводится копия почтальона: enter image description here

Любые мысли? Я не видел примера в Quickstarts, который использует Identity Tokens.

Спасибо!

ответ

1

Тип предоставления пароля не поддерживает токены идентификации. См. RFC6749.

Лучшее, что вы можете здесь сделать, это использовать токен доступа для получения претензий к пользователю с использованием конечной точки userinfo.

Рекомендация - использовать интерактивный поток, такой как неявный или гибридный для аутентификации конечного пользователя.

+0

Спасибо. Я делал именно так, как вы предлагали - вызывать конечную точку userinfo. Какие типы (-ы) гранта я могу использовать с Postman для получения токенов идентичности? – Greg

1

Ответы @leastprivilege верны, но вместо вызова конечной точки userinfo у вас также есть возможность включить UserClaims, который вы желаете в своем определении ApiResource.

На данный момент вы запрашиваете new[] { JwtClaimTypes.Name, JwtClaimTypes.Role, "module" }, но если вы изменили это, чтобы включить все претензии, которые вы (в настоящее время) определяете как часть IdentityResources, тогда эти претензии также будут доступны в access_token.