在IdentityServer3中,如果还请求访问令牌,为什么所有身份声明都会从id_token中排除?

时间:2017-01-03 10:48:27

标签: asp.net-web-api identityserver3

在处理自定义实现时,我一直在查看IdentityServer3的源代码。我在尝试向id_token添加声明时遇到问题。我遇到了这段代码here

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

在此类中设置IncludeAllIdentityClaims属性会影响在程序流程达到here后如何添加声明。我的问题是为什么IncludeAllIdentityClaims属性被设置为与access_token相关的值?我认为access_token及其可以持有的声明与id_token及其拥有的相应声明完全无关?

1 个答案:

答案 0 :(得分:1)

因为这是规范的编写方式 - 它可以优化令牌大小。我们在范围声明中有一个名为AlwaysIncludeInIdToken的设置,用于禁用此优化。