苍穹外卖
约 639 字大约 2 分钟
2025-07-24
认证与授权
请说明 JWT 的登录认证流程。
JWT (JSON Web Token) 的登录认证流程,旨在实现无状态的、分布式的身份验证。其核心思想是,在用户成功登录后,服务器会生成一个包含用户身份信息的、经过签名的 Token,并将其返回给客户端。客户端在后续的每次请求中,都需要携带这个 Token,服务器通过验证 Token 的合法性来确认用户身份。
具体流程如下:
用户登录:客户端使用用户名和密码发起登录请求。
服务器验证:服务器接收到请求后,会验证用户名和密码的正确性。
生成 Token:验证通过后,服务器会根据用户的身份信息(如用户 ID、角色等)和一个预定义的密钥 (Secret),生成一个 JWT。JWT 由三部分组成:
Header (头部):包含 Token 的类型 (JWT) 和所使用的签名算法,例如 HMAC SHA256 或 RSA。
Payload (负载):包含声明 (Claims),即需要传递的数据。例如,用户 ID (sub)、签发时间 (iat)、过期时间 (exp) 等标准字段,也可以包含自定义的业务字段。
Signature (签名):将编码后的 Header 和 Payload,通过指定的签名算法和服务器端的密钥进行加密生成。这个签名的作用是防止数据被篡改。
返回 Token:服务器将生成的 JWT 返回给客户端。
客户端存储:客户端收到 Token 后,通常会将其存储在本地,例如浏览器的
localStorage
、sessionStorage
或HTTP-only Cookie
中。发起后续请求:客户端在之后向服务器发起的所有请求中,都需要在请求头 (Header) 的
Authorization
字段中携带这个 JWT,通常使用Bearer
模式,形如:Authorization: Bearer <token>
。服务器验证 Token:服务器接收到请求后,会解析
Authorization
头获取 Token。通过验证 Token 的签名是否有效(使用相同的密钥和算法进行校验)、是否过期等,来判断 Token 的合法性。处理请求:如果 Token 验证通过,服务器则确认用户身份合法,并处理该请求。如果验证失败,则拒绝请求,并返回相应的错误码(如
401 Unauthorized
)。
这个流程的优势在于,服务器无需在自身存储用户的会话信息(无状态),使得系统更易于水平扩展和解耦。