在TokenValidated事件上添加其他声明

时间:2018-07-31 12:27:28

标签: authentication asp.net-core claims-based-identity asp.net-core-1.1

在我的ASP.NET Core 1.1应用程序中,我使用JWT令牌进行身份验证。 在某些情况下,我需要向用户添加令牌中未提供的其他声明。

因此,我迷上了IJwtBearerEvents.TokenValidated事件,并试图在该事件处理程序中添加其他声明。我尝试了几件事:

// (1) - doesn't work
((ClaimsIdentity)context.HttpContext.User.Identity).AddClaim(myNewClaim);

// (2) - doesn't work
var jwtToken = context.SecurityToken as JwtSecurityToken;
((ICollection<Claim>)jwtToken.Claims).Add(myNewClaim);

// (3) - doesn't work
context.HttpContext.User.AddIdentity(new ClaimsIdentity(new Claim[] { myNewClaim }));

无论我怎么做,我都不会在控制器操作的User.Claims中看到这些附加声明。

在成功验证了承载令牌后,添加其他声明的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

@MarkG链接的文章显示了访问声明的第四种方法-这种方法有效:

// (4) - works!
(context.Ticket.Principal.Identity as ClaimsIdentity).AddClaim(myNewClaim);