IdentityServer4: Add Custom default Claim to Client Principal for Client_Credential Granttype
With some inquiries I finally found out how to do this. I needed a way to add claims dynamically to the client when token was requested.
In order to do that I had to extend ICustomTokenRequestValidator
and then include my class in Startup.cs thorough dependency injection
public class DefaultClientClaimsAdder : ICustomTokenRequestValidator
{
public Task ValidateAsync(CustomTokenRequestValidationContext context)
{
context.Result.ValidatedRequest.Client.AlwaysSendClientClaims = true;
context.Result.ValidatedRequest.ClientClaims.Add(new Claim("testtoken","testbody"))
return Task.FromResult(0);
}
}
Configure services in Startup.cs
services.AddTransient<ICustomTokenRequestValidator, DefaultClientClaimsAdder>();
Alternatively, you can use ClientStore
to add new claims into clients.
public class YourClientStore : IClientStore
{
private readonly DbContext _context;
private readonly IMapper _mapper;
public YourClientStore(DbContext context,
IMapper mapper)
{
_context= context;
_mapper = mapper;
}
public Task<Client> FindClientByIdAsync(string clientId)
{
var dbClient = _context.Clients.AsQueryable()
.Where(x => x.ClientId == clientId)
.FirstOrDefault();
var client = _mapper.Map<Client>(dbClient);
if (client != null)
{
client.Claims.Add(new Claim("<your claim name>", "<your claim value>"));
}
return Task.FromResult(client);
}
}