Skip to main content

jwt

·158 words·1 min
😈long && 😻liang
Author
😈long && 😻liang
A IT worker with PHP/GO as the main technology stack
work - This article is part of a series.
Part 5: This Article

JSON Web Token (JWT) 详细解释
#

JSON Web Token (JWT) 是一种开放标准 (RFC 7519),用于在各方之间安全地传输信息作为 JSON 对象。它特别适用于授权和信息交换场景。

1. JWT 的基本结构
#

JWT 由三部分组成,用点号(.)分隔:

Header.Payload.Signature

1.1 Header (头部)
#

头部通常由两部分组成:

  • 令牌类型 (typ):通常是 “JWT”
  • 签名算法 (alg):如 HMAC SHA256 或 RSA

示例:

{
  "alg": "HS256",
  "typ": "JWT"
}

1.2 Payload (负载/声明)
#

包含所谓的"声明"(claims),是关于实体(通常是用户)和其他数据的声明。有三种类型的声明:

  • 注册声明(Registered claims):预定义的声明,如:

    • iss (issuer):签发者
    • exp (expiration time):过期时间
    • sub (subject):主题
    • aud (audience):受众
  • 公开声明(Public claims):可以自定义,但应该避免与已注册声明冲突

  • 私有声明(Private claims):自定义声明,用于在同意使用它们的各方之间共享信息

示例:

{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true,
  "iat": 1516239022
}

1.3 Signature (签名)
#

签名用于验证消息在传输过程中没有被更改,对于使用私钥签名的令牌,它还可以验证 JWT 的发送者是否是它所说的那个人。

创建签名需要:

  • 编码后的头部
  • 编码后的负载
  • 一个密钥
  • 头部中指定的算法

例如使用 HMAC SHA256 算法:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

2. JWT 的工作流程
#

  1. 用户登录:用户提供凭证(用户名/密码)
  2. 验证凭证:服务器验证凭证
  3. 生成JWT:验证成功后,服务器生成JWT并返回给客户端
  4. 存储JWT:客户端(通常是浏览器)存储JWT(通常在localStorage或cookie中)
  5. 后续请求:客户端在后续请求的Authorization头中发送JWT
  6. 验证JWT:服务器验证JWT并处理请求

3. JWT 的优点
#

  1. 无状态:服务器不需要存储会话信息
  2. 跨域友好:适合单页应用(SPA)和跨域API调用
  3. 可扩展性:可以包含自定义声明
  4. 安全性:使用签名确保数据完整性
  5. 标准化:基于开放标准,多种语言支持

4. JWT 的安全考虑
#

  1. 敏感信息:JWT可以被解码,不应存储敏感信息
  2. 过期时间:应设置合理的过期时间(exp声明)
  3. HTTPS:应始终通过HTTPS传输
  4. 存储安全:客户端存储要防止XSS攻击
  5. 密钥保护:签名密钥必须妥善保护

5. JWT 的使用场景
#

  1. 认证:最常见的用途,用户登录后获取JWT
  2. 信息交换:安全地在各方之间传输信息
  3. 一次性验证:如密码重置链接

6. JWT 示例
#

一个完整的JWT示例:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

解码后:

  • Header:
{
  "alg": "HS256",
  "typ": "JWT"
}
  • Payload:
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

JWT是现代Web应用和API中广泛使用的认证和授权机制,理解其工作原理对于开发安全应用至关重要。

work - This article is part of a series.
Part 5: This Article