IdentityServer数据库中的dbo.Clients
表包含ClientId
和ClientName
,但是,请求客户端凭据令牌的令牌中不包含客户端名称。
是否有办法从给定客户端ID的IdentityServer中检索客户端信息,或请求将客户端名称添加到令牌中?
答案 0 :(得分:1)
您可以使用自定义令牌请求验证器动态添加它们:
public class ClaimClientsUpdated : ICustomTokenRequestValidator
{
public Task ValidateAsync(CustomTokenRequestValidationContext context)
{
context.Result.ValidatedRequest.Client.AlwaysSendClientClaims = true;
context.Result.ValidatedRequest.ClientClaims.Add(new Claim("name", context.Result.ValidatedRequest.Client.ClientName));
return Task.FromResult(0);
}
}
在DI中注册:
services.AddTransient<ICustomTokenRequestValidator, ClaimClientsUpdated>();
它将在自定义声明中添加前缀“ client_”,因此声明将是访问令牌中的"client_name": "value"
。
答案 1 :(得分:1)
通常,可以通过向ClientClaims表中添加声明来添加有关客户端的信息。例如。 Type = Name, Value = MyCustomName
添加了哪些声明(假设前缀为client_
)
"client_Name": "MyCustomName"
这将使您无需添加或更改代码即可添加有关客户端的信息。
客户端名称的缺点是您必须添加带有冗余信息的声明,因为Clients.ClientName不是来源。优点是仅是配置。