繁体   English   中英

身份令牌不调用 IdentityServer4 GetProfileDataAsync,只调用访问令牌

[英]IdentityServer4 GetProfileDataAsync is not called for Identity Token, only Access Token

使用 IdentityServer 4 (4.1.2),我添加了一个实现 IProfileService 接口的类。 GetProfileDataAsync 方法应该被调用多次(对于每个令牌),但我的方法只为访问令牌(ClaimsProviderAccessToken)调用。

  public class LocalUserProfileService : IProfileService
  {
    private readonly IIdentityProviderUserService _identityProviderUserService;

    public LocalUserProfileService(IIdentityProviderUserService identityProviderUserService)
    {
      _identityProviderUserService = identityProviderUserService ??
        throw new ArgumentNullException(nameof(identityProviderUserService));
    }
    public async Task GetProfileDataAsync(ProfileDataRequestContext context)
    {
      var subjectId = context.Subject.GetSubjectId();
      var claims = (await _identityProviderUserService.GetUserClaimsBySubjectAsync(subjectId)).ToList();
      
      Debug.WriteLine($"Adding claims to {context.Caller}");
      context.IssuedClaims.AddRange(claims);
      
    }

    public async Task IsActiveAsync(IsActiveContext context)
    {
      var subjectId = context.Subject.GetSubjectId();
      context.IsActive = await _identityProviderUserService.IsUserActiveAsync(subjectId);
    }
  }

我可以设法只使用我的访问令牌来获取自定义声明,但我想知道为什么不为 identity_token 调用代码,因为我更喜欢在两个令牌中都有声明。

您是否将AlwaysIncludeUserClaimsInIdToken标志设置为 true? 否则,ID 令牌的声明将通过 UserInfo 端点提供。

减小 ID-token 大小的常用方法是不在 ID-token 中包含所有声明。 大令牌也会导致大会话 cookie。 默认情况下,令牌存储在会话 cookie 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM