You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 00:50:22