Skip to content

JWT(JSON Web Token)


一、JWT 基本概念与结构

  1. 定义
    JWT 是一种开放标准(RFC 7519),用于在网络应用间以 JSON 格式安全传输信息。其核心功能是 身份验证信息交换 ,尤其适用于分布式系统中无状态认证场景。

  2. 组成结构
    JWT 由三部分通过 . 拼接而成: • Header(头部):声明加密算法(如 HS256RS256)和令牌类型(固定为 JWT),经 Base64URL 编码。 • Payload(负载):存储用户声明(Claims),包括预定义字段(如 exp 过期时间、iss 签发者)和自定义数据,仅 Base64URL 编码,未加密,需避免存储敏感信息。 • Signature(签名):对 Header 和 Payload 的编码结果拼接后进行加密(如 HMAC、RSA),确保数据完整性。

    示例

    eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0...base64.AdwNx4NtEumBL5SkcOiBQ

二、JWT 工作原理与流程

  1. 认证流程
    • 用户登录成功后,服务端生成 JWT 并返回客户端。 • 客户端存储 JWT(如 Cookie 或 LocalStorage),后续请求携带在 Authorization 头中。 • 服务端验证签名、过期时间等,确认用户身份。

  2. 与传统 Session 对比
    Session:服务端存储会话信息,需维护状态,存在跨域和扩展性问题。 • JWT:无状态,信息自包含,适合分布式系统,但需注意令牌撤销问题。


三、JWT 生成与验证

  1. 生成步骤
    • 定义 Header 和 Payload。 • 使用密钥(对称加密)或公私钥(非对称加密)生成签名。 • 拼接三部分并编码。

  2. 验证逻辑
    • 分割 Token 为三部分,解码 Header 和 Payload。 • 根据 Header 中的算法重新计算签名,与原始签名对比,确保数据未被篡改。

    代码示例(Python)

    python
    import jwt
    token = jwt.encode({"user": "admin", "exp": datetime.utcnow() + timedelta(hours=1)}, "secret_key", algorithm="HS256")
    decoded = jwt.decode(token, "secret_key", algorithms=["HS256"])

四、JWT 安全攻防

  1. 常见漏洞
    空加密算法(None):攻击者篡改 Header 的 algNone,绕过签名验证。 • 密钥混淆攻击:将非对称算法(如 RS256)改为对称算法(如 HS256),利用公钥伪造签名。 • 密钥爆破:弱密钥可被暴力破解工具(如 jwt_tool)破解。

  2. 防御措施
    • 禁用 alg: None,严格校验算法类型。 • 使用强密钥,定期更换。 • 结合 HTTPS 传输,防止中间人攻击。


五、JWT 使用注意事项

  1. 安全性设计
    短过期时间:减少令牌泄露风险。 • 双 Token 机制access_token(短有效期)和 refresh_token(长有效期,存储于服务端),通过后者刷新前者,实现无感登录。 • 敏感数据加密:Payload 中敏感字段需额外加密。

  2. 运维建议
    • 监控异常 Token 使用(如高频请求)。 • 实现 Token 黑名单(如 Redis 存储失效 Token)。


六、实际应用场景

  1. 单点登录(SSO)
    JWT 可跨域传递用户信息,减少服务端会话管理负担。
  2. API 鉴权
    微服务架构中,服务间通过验证 JWT 实现无状态通信。
  3. 移动端认证
    移动 App 通过 JWT 实现用户身份持久化。

七、工具推荐

  1. 生成与解析工具
    • 在线工具:jwt.io • 命令行工具:jwtctl(支持跨平台生成与读取)。
  2. 渗透测试工具
    • Burp Suite 插件:JSON Web TokensHAE。 • 密钥爆破工具:jwt_tool

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer