我认为您应该检查 ApiResource 配置。无论您在 ApiResource 配置的 UserClaims 属性中添加什么声明,这些声明都会显示在访问令牌中。例如
public IEnumerable<ApiResource> GetApiResources()
{
return new List<ApiResource>
{
new ApiResource("api1")
{
UserClaims = new[] { "CustomClaim1","CustomClaim2"},},}
}
在上面的代码中,访问代码将包含 CustomClaim1 和 CustomClaim2 。因此,如果您不提及它们,它们将不会出现在访问令牌中。希望这会有所帮助!
,
您可以使用IProfileService
向JWT令牌添加自定义声明:
public class MyProfileService : IProfileService
{
public MyProfileService()
{ }
public Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var claims = new List<Claim>()
{
new Claim(ClaimTypes.Role,"Admin")
};
context.IssuedClaims.AddRange(claims);
return Task.CompletedTask;
}
public Task IsActiveAsync(IsActiveContext context)
{
// await base.IsActiveAsync(context);
return Task.CompletedTask;
}
}
担心ID令牌的长度,默认情况下,声明将不包括在ID令牌中,而是从OIDC的userinfo端点获取声明。您可以:
-
在React模板中从user.profile
获取声明,它将自动向ID为的userinfo端点发送请求。
-
或者在Identity Server 4中注册客户端时,可以在客户端选项中将AlwaysIncludeUserClaimsInIdToken
设置为true,但是恐怕您不必使用ApiAuthorization
服务,这是IdentityServer的全部功能仍然可以定制身份验证以满足您的需求。
本文链接:https://www.f2er.com/3136454.html