我正在尝试IdentityServer4演示项目,并将用户声明添加到ProfileDataRequestContext.IssuedClaims实现中的IProfileService中。我注意到的一件事是,存在一个context.RequestedClaimTypes集合,在我尝试过的任何资源/标识/范围配置变体中,该集合始终为空。在什么条件下该集合具有数据?

最佳答案

如果在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将包含这些请求声明,以使Identity Server满足您的要求。

10-06 14:54