Angular+JWT认证下,.NET 7 Web API如何识别多登录用户会话
.NET 7 Web API 基于JWT的用户身份识别逻辑
首先得明确:JWT是无状态认证机制,.NET 7 Web API里并没有传统意义上的“会话匹配”——服务器不会存储用户的会话数据,所有用户身份信息都封装在JWT Token本身里。
具体的身份识别流程是这样的:
- 用户通过Angular客户端提交登录请求,验证通过后,.NET 7服务器生成包含用户核心信息(比如用户ID、角色、权限等)的JWT Token,返回给客户端。
- 客户端将Token存储在本地(比如
localStorage或会话存储),之后所有需要权限的请求,都会在HTTP请求头的Authorization字段里带上Bearer {你的Token}。 - .NET 7的JWT认证中间件会自动拦截带Token的请求,做以下处理:
- 验证Token的签名有效性,确保Token没有被篡改。
- 检查Token的过期时间(
exp声明),判断是否失效。 - 解析Token中携带的所有用户声明(Claims),生成
ClaimsPrincipal对象,这个对象就代表当前请求的用户身份。
- 后续的业务代码里,你可以通过
HttpContext.User获取到这个ClaimsPrincipal,从而识别当前请求属于哪个用户。
这种机制天然支持多用户同时登录:每个用户的Token都是独立的,服务器通过解析不同的Token得到不同的ClaimsPrincipal,完全不需要额外的会话匹配逻辑。
如果需要实现多设备登录限制(比如禁止用户同时在多个设备登录),那得自己额外扩展——比如在数据库中记录用户的有效Token列表,每次请求时验证当前Token是否在用户的有效列表内,同时处理Token过期或注销的逻辑。
内容的提问来源于stack exchange,提问作者Rushee
相关产品推荐
相关产品推荐

