代码之家  ›  专栏  ›  技术社区  ›  Robert Hegner

在TokenValidated事件上添加其他声明

  •  1
  • Robert Hegner  · 技术社区  · 6 年前

    在我的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 回复  |  直到 6 年前
        1
  •  1
  •   Robert Hegner    6 年前

    由@MarkG链接的文章展示了访问索赔的第四种方式,这一种方式有效:

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