ProfileDataRequestContext.RequestedClaimTypes 什么时候不为空?

When is ProfileDataRequestContext.RequestedClaimTypes not empty?

我正在试用 IdentityServer4 演示项目,我正在 IProfileService 实施中向 ProfileDataRequestContext.IssuedClaims 添加用户声明。我注意到的一件事是有一个 context.RequestedClaimTypes 集合,在我尝试过的任何 resource/identity/scope 配置变体中它总是空的。这个集合在什么情况下有数据?

我发现如果您设置 client.GetClaimsFromUserInfoEndpoint = true 并且对 /connect/userinfo 端点进行额外的往返并且请求请求值“sub”。

如果您在 ApiResources 的定义中定义了 UserClaims,那么这些将被填充到 context.RequestClaimTypes 中。 例如:

new ApiResource
{
  Name = "TestAPI",
  ApiSecrets = { new Secret("secret".Sha256()) },
  UserClaims = {
    JwtClaimTypes.Email,
    JwtClaimTypes.EmailVerified,
    JwtClaimTypes.PhoneNumber,
    JwtClaimTypes.PhoneNumberVerified,
    JwtClaimTypes.GivenName,
    JwtClaimTypes.FamilyName,
    JwtClaimTypes.PreferredUserName
                    },
  Description = "Test API",
  DisplayName = "Test API",
  Enabled = true,
  Scopes = { new Scope("testApiScore) }
}

然后您的 ProfileDataRequestContext.RequestClaimTypes 将包含这些请求声明,以便您的身份服务器实现您认为合适的方式。

答案:https://github.com/IdentityServer/IdentityServer4/issues/1067

Whenever you request a scope that has associated claims.