如何扩展IdentityServer4
中设置的id_token声明?
我们使用IdentityServer4
来生成id_token
,但是其中包含的一组断言是不够的。
我们已经实现了自己的ProfileService
,可以生成所需的声明集。但是,当请求id_token
时,这些其他声明将被截断。
可以以某种方式在不更改源代码id_token
的情况下修改IdentityServer4
的内容吗?
答案 0 :(得分:5)
对于id_token中的内容声明,IdentityServer4符合DefaultClaimsService
(IClaimsService
接口的默认实现)。
要定义一组声明,它使用配置文件范围中包含的声明类型。
要管理此问题,只需定义自己的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,
...
};
}
}