JWT(JSON Web Token)是一种用于安全地在各方之间传递信息的开放标准(RFC 7519)。它使用 JSON 格式表示信息,并通过数字签名确保信息的完整性和真实性。JWT 通常用于身份验证和信息交换。
JWT 的结构
一个 JWT 由三个部分组成,用点 .
分隔:
- Header(头部):
- 通常包含令牌类型(即“JWT”)和所使用的签名算法(如 HMAC SHA256 或 RSA)。
示例:
{
"alg": "HS256",
"typ": "JWT"
}
- Payload(有效载荷):
- 包含声明(claims),这些声明是关于实体(通常是用户)及其附加数据的元数据。
- 声明分为三种类型:注册声明、公共声明和私有声明。
示例:
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"exp": 1516239022
}
- Signature(签名):
- 用于验证消息是否未被篡改。
- 生成方式:将编码后的 Header 和 Payload 用句点连接,并使用指定算法及密钥进行签名。
JWT 的工作流程
- 用户通过登录获取凭据。
- 服务器验证凭据后,生成一个 JWT,并返回给用户。
- 用户存储该 token,并在后续请求中将其作为 Authorization 请求头的一部分发送回服务器。
- 服务器接收 token,解析并验证,以确定用户身份。
JWT 的优点
- 无状态:不需要在服务器端存储会话信息,减轻了服务器负担。
- 跨域支持:可以轻松地在多个域之间共享,从而简化了跨域认证问题。
- 自包含:payload 中包含所有用户所需的信息,减少了数据库查询次数。
使用场景
- 身份验证:用作 API 接口中的身份令牌,客户端在每次请求时发送 token 来识别身份。
- 信息交换:由于其自包含特性,可以安全地传递任何类型的信息。
注意事项
- 确保选择强密码或秘钥来防止 token 被伪造或篡改。
- 不要将敏感信息放入 JWT payload,因为它是可解码的。虽然内容不可篡改,但任何人都可以查看到内容。
- 设置适当的过期时间以减少可能造成的风险。一旦 token 过期,用户需要重新认证以获取新 token。
如果你对具体实现、库或框架有更多需求,请告诉我!
内容由零声教学AI助手提供,问题来源于学员提问