2017-01-03 4 views
0

사용자 정의 구현 작업을하는 동안 IdentityServer3의 소스 코드를 살펴 보았습니다. Id_token에 클레임을 추가하는 데 문제가 있습니다. 나는 코드 here의 조각 건너 온 :IdentityServer3에서 액세스 토큰이 요청 된 경우 id_token에서 모든 ID 클레임이 제외되는 이유는 무엇입니까?

//From AuthorizeResponseGenerator.cs, method CreateImplicitFlowResponseAsync 
string jwt = null; 
if (responseTypes.Contains(Constants.ResponseTypes.IdToken)) 
{ 
    var tokenRequest = new TokenCreationRequest 
    { 
      ValidatedRequest = request, 
      Subject = request.Subject, 
      Client = request.Client, 
      Scopes = request.ValidatedScopes.GrantedScopes, 

      Nonce = request.Raw.Get(Constants.AuthorizeRequest.Nonce), 
      IncludeAllIdentityClaims = !request.AccessTokenRequested, // <---- This line 
      AccessTokenToHash = accessTokenValue, 
      AuthorizationCodeToHash = authorizationCode 
     }; 

을이 클래스는 프로그램의 흐름이 here에 도달하면 주장이 추가되는 방식에 영향에 IncludeAllIdentityClaims 속성을 설정. 내 질문은 왜 IncludeAllIdentityClaims 속성을 access_token 관련된 값을 설정하는 것입니다? 나는 access_token과 그것이 가질 수있는 클레임이 id_token과 그것과 관련된 클레임과 완전히 관련이 없다고 생각했다.

답변

1

사양이 어떻게 쓰여졌 는가? 토큰 크기를 최적화하는 것입니다. 이 최적화를 사용하지 않으려면 스코프 클레임에 AlwaysIncludeInIdToken이라는 설정이 있습니다.

+0

방금 ​​의견을 작성하여 https://github.com/IdentityServer/IdentityServer3.Samples/issues/5에서 확인할 수 있습니다. OIDC 스펙에 정의 된대로 말입니다. 따라서 id_token 만 요청하면 이해할 수있는 모든 주장이 요청됩니다. 감사! –