JWT(JSON Web Token)验证过程
通俗描述 JWT(JSON Web Token)的过程
JWT(JSON Web Token)是一种在网络应用中传递信息的方式,广泛用于 身份验证 和 信息交换。它的核心思想是 通过令牌安全地传递信息,确保信息的 完整性 和 保密性。
JWT 的过程:
-
用户登录(身份验证)
- 用户通过用户名和密码登录到服务器。
- 服务器验证用户的身份。如果身份验证成功,服务器生成一个 JWT,这个令牌包含了用户的身份信息和一些附加的声明(如过期时间)。
-
JWT 生成
- JWT 由三部分组成:头部(Header)、有效载荷(Payload) 和 签名(Signature)。
- 头部(Header):指定令牌的类型(通常是“JWT”)和使用的签名算法(例如 HMAC SHA256)。
- 有效载荷(Payload):包含用户的身份信息及其他数据,称为“声明(Claims)”。
- 签名(Signature):为了确保令牌没有被篡改,服务器会用一个密钥和算法(如 HMAC SHA256)对头部和有效载荷进行加密生成签名。
- JWT 由三部分组成:头部(Header)、有效载荷(Payload) 和 签名(Signature)。
-
JWT 返回给用户
- 服务器将生成的 JWT 返回给用户。用户将 JWT 存储在浏览器的 localStorage 或 cookie 中。
-
用户发起请求
- 用户在后续的请求中,将存储的 JWT 附加到 HTTP 请求的 Authorization 头中,格式为:
Authorization: Bearer <JWT>
- 用户在后续的请求中,将存储的 JWT 附加到 HTTP 请求的 Authorization 头中,格式为:
-
服务器验证 JWT
- 服务器接收到请求后,首先从 HTTP 头中提取出 JWT。
- 服务器通过解码 JWT,检查 签名,确保令牌没有被篡改。
- 如果签名有效,服务器可以信任这个令牌,并读取其 有效载荷 中的数据(例如用户ID、角色等)。
- 如果签名无效或令牌已过期,服务器将拒绝请求。
-
访问受保护资源
- 如果 JWT 验证通过,服务器根据有效载荷中的信息,允许用户访问请求的资源。
JWT 的结构:
JWT 由三部分组成,使用点(.
)连接:
header.payload.signature
-
头部(Header):
头部指定了令牌的类型(通常是 "JWT")和所使用的签名算法(如 HMAC SHA256)。例如:
{ "alg": "HS256", "typ": "JWT" }
-
有效载荷(Payload):
有效载荷包含了声明(Claims),如用户ID、角色、过期时间等。常见的声明有:- sub(主题):通常是用户的唯一标识符。
- exp(过期时间):JWT 的过期时间,超过这个时间后 JWT 就不再有效。
例如:
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 }
-
签名(Signature):
使用 密钥(secret)和 算法(如 HMAC SHA256)对头部和有效载荷进行加密,生成签名。这确保了数据的完整性。生成签名的过程:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)
JWT 的优势:
- 紧凑性:JWT 是 URL 安全的,并且体积小,适合在 HTTP 请求头中传输。
- 自包含:JWT 包含了所有用户信息,服务器不需要存储会话数据,减少了服务器负担。
- 安全性:JWT 通过签名确保数据未被篡改,并且可以加密确保数据的机密性。
总结:
JWT 通过签名确保数据的 完整性,通过加密确保数据的 机密性,并且广泛应用于 身份验证 和 信息交换。它是一个轻量级的、跨平台的标准,适用于 Web 应用、微服务架构和其他分布式系统中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通