我无法在我的访问令牌中添加自定义声明。
流程:
我在最后一部分遇到麻烦。我想在访问令牌中包含用户ID。在.NET Core中执行此操作的最佳方法是什么?用户ID仅在Web应用程序和api中已知。身份服务器对此一无所知。
我设法使用
将自定义声明放入我的身份options.Events = new OpenIdConnectEvents
{
OnTicketReceived = e =>
{
e.Principal = TransformClaims(e.Principal, services).Result;
return Task.CompletedTask;
}
};
private async Task<ClaimsPrincipal> TransformClaims(ClaimsPrincipal principal, IServiceCollection services)
{
var sp = services.BuildServiceProvider();
var profileService = sp.GetService<IProfileService>();
Guid.TryParse(principal.Claims.FirstOrDefault(c => c.Type.Equals("contact_id"))?.Value, out Guid crmId);
var profile = await profileService.GetProfileByCrmId(crmId);
if (profile == null)
_logger.LogWarning("User not found for contact_id {crmId}", crmId);
var userId = (profile != null) ? profile.Id : 1;
var transformed = new ClaimsPrincipal();
transformed.AddIdentities(principal.Identities);
transformed.AddIdentity(new ClaimsIdentity(new Claim[]
{
new Claim("user_id", userId.ToString())
}));
return transformed;
}
有没有办法在我想发送到我的api的访问令牌中获取此信息?
我的应用程序已经有一个access_token(我可以从httpcontext中提取它),但是它不包含声明。