在IdentityServer4和ASP.NET Core中检索客户端名称

时间:2019-10-15 03:44:49

标签: asp.net-core identityserver4

IdentityServer数据库中的dbo.Clients表包含ClientIdClientName,但是,请求客户端凭据令牌的令牌中不包含客户端名称。

是否有办法从给定客户端ID的IdentityServer中检索客户端信息,或请求将客户端名称添加到令牌中?

2 个答案:

答案 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不是来源。优点是仅是配置。