如何在ASP.NET Core的JWT Token中添加用户ID数据?
解决方案
JWT中存储用户身份信息是通过**Claim(声明)**实现的,你不需要添加不存在的users参数,只需要在claims列表中加入用户ID对应的Claim即可,具体修改如下:
修改后的完整代码
var secretKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret key"));//token secret key var signingCredentials = new SigningCredentials(secretKey, SecurityAlgorithms.HmacSha256); // 构建包含用户ID的Claim列表 var claims = new List<Claim> { // 使用标准的NameIdentifier类型存储用户ID,也可以自定义类型(比如"user_id") new Claim(ClaimTypes.NameIdentifier, user.ID.ToString()) }; var tokenOptions = new JwtSecurityToken( issuer: "https://localhost:44309/", audience: "https://localhost:44309/", claims: claims, // 传入包含用户ID的Claim列表 expires: DateTime.Now.AddMinutes(5), signingCredentials: signingCredentials ); var tokenString = new JwtSecurityTokenHandler().WriteToken(tokenOptions); return Ok(new { Token = tokenString });
后续解析Token获取用户ID的示例
当需要验证Token并获取用户ID时,可以这样做:
// 假设从请求头获取Token var token = Request.Headers["Authorization"].ToString().Replace("Bearer ", ""); var tokenHandler = new JwtSecurityTokenHandler(); var validationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidateAudience = true, ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidIssuer = "https://localhost:44309/", ValidAudience = "https://localhost:44309/", IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret key")) }; // 验证Token并获取Claims var claimsPrincipal = tokenHandler.ValidateToken(token, validationParameters, out _); // 获取用户ID var userId = claimsPrincipal.FindFirst(ClaimTypes.NameIdentifier)?.Value;
内容的提问来源于stack exchange,提问作者Tim's
相关产品推荐
相关产品推荐

