如何扩展IdentityServer4中设置的id_token声明?

时间:2018-09-14 13:05:38

标签: jwt identityserver4

如何扩展IdentityServer4中设置的id_token声明? 我们使用IdentityServer4来生成id_token,但是其中包含的一组断言是不够的。 我们已经实现了自己的ProfileService,可以生成所需的声明集。但是,当请求id_token时,这些其他声明将被截断。 可以以某种方式在不更改源代码id_token的情况下修改IdentityServer4的内容吗?

1 个答案:

答案 0 :(得分:5)

对于id_token中的内容声明,IdentityServer4符合DefaultClaimsServiceIClaimsService接口的默认实现)。
要定义一组声明,它使用配置文件范围中包含的声明类型。

要管理此问题,只需定义自己的IdentityResource,将其Name属性设置为IdentityServerConstants.StandardScopes.Profile,然后传入IdentityResources配置方法(如AddInMemoryIdentityResources())即可,而不是标准方法IdentityResources.Profile

以下是此类IdentityResource的示例:

public class ProfileIdentityResource : IdentityResource
{
    public ProfileIdentityResource()
    {
        Name = IdentityServerConstants.StandardScopes.Profile;
        DisplayName = "User profile";
        Description = "Identity resource which defines IdentityToken content";
        Emphasize = true;

        // claims, which should be added to IdentityToken
        UserClaims = new string[]
        {
            // standard
            JwtClaimTypes.Name,
            JwtClaimTypes.Role,
            JwtClaimTypes.Email,

            // custom
            JwtAdditionalClaimTypes.Login,
            JwtAdditionalClaimTypes.Division,
            JwtAdditionalClaimTypes.DivisionId,
            ...
        };
    }
}