在处理自定义实现时,我一直在查看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及其拥有的相应声明完全无关?
答案 0 :(得分:1)
因为这是规范的编写方式 - 它可以优化令牌大小。我们在范围声明中有一个名为AlwaysIncludeInIdToken
的设置,用于禁用此优化。