乐途乐途
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
主页
  • 计算机基础

    • TCP/IP协议
    • Linux命令
    • HTTP协议
  • 数据库

    • SQL
    • MySQL 5.7
  • 编程语言

    • C语言
    • Python2
    • Python3
  • 数据格式

    • JSON
    • XML
  • 认证与安全

    • JWT
  • 工具

    • Markdown
  • Git

    • GitFlow
  • Quartz

    • Quartz
  • Java

    • MyBatis
    • Spring
    • Spring MVC
    • Maven 入门
    • Maven 进阶
    • Java 设计模式
  • 缓存

    • Redis
联系
阿里云
  • 学习路径
  • JWT 基础

    • JWT 概述
    • JWT 结构详解
  • 签名与加密

    • JWS 签名基础
    • RS256与ES256签名
    • JWE 加密
  • 密钥管理

    • JWK 与密钥管理
  • 算法原理

    • 核心算法详解
  • 实战与安全

    • JWT 实际应用
    • JWT 安全攻防

JWT 概述

本教程结合 广州飞翔科技 (learnto.cn)的实际场景进行讲解。


什么是 JWT

JWT(JSON Web Token) 是一种在受限环境中安全传递 声明(claims) 的标准格式。它的发音与英文单词 "jot"(/dʒɒt/)相同,意为"紧凑、可打印的声明传递格式"。

一个 JWT 看起来像这样(为便于阅读插入了换行):

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

虽然看起来像乱码,但它实际上是一系列 声明(claims) 的紧凑表示,附带一个 签名(signature) 以验证其真实性。解码后,它由两部分 JSON 组成:

头部(Header) :

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

载荷(Payload) :

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

声明(claims) 是关于某个特定方或对象的定义或断言。JWT 的魔力在于标准化了在常见操作上下文中有用的声明,例如 sub(subject,主题)用于标识用户身份。

JWT 可以使用 JWS(JSON Web Signature) 进行签名,和/或使用 JWE(JSON Web Encryption) 进行加密,为许多安全问题提供强大、标准的解决方案。


JWT 解决了什么问题

虽然 JWT 的主要目的是在两方之间传输声明,但最重要的价值在于 标准化工作——提供一种 简单、可选验证和/或加密 的容器格式。过去,针对同一问题的临时解决方案层出不穷,JWT 带来的价值在于一种 简单、实用、标准的容器格式 。

常见应用场景包括:

  • 身份验证(Authentication) :确认用户是谁
  • 授权(Authorization) :确认用户能访问什么资源
  • 联邦身份(Federated Identity) :跨系统共享身份认证服务
  • 客户端会话(Client-side / Stateless Sessions) :将会话数据保存在客户端,实现无状态架构
  • 客户端机密(Client-side Secrets) :安全地在客户端传递敏感信息

与传统 Session Cookie 方案对比

对比维度Session CookieJWT
状态存储服务端(Redis/数据库)客户端(浏览器/APP)
服务端查询每次请求需查 Session 存储无需查询,直接验证签名
扩展性需要共享 Session 存储天然适合分布式/微服务
跨域支持受 Cookie 同源策略限制可放入 Header 任意传递
安全性仅暴露 Session ID需防范 XSS、签名剥离等攻击

飞翔科技实战场景:小崔的无状态认证改造

广州飞翔科技 (learnto.cn)成立于 2018 年,旗下拥有电商、社群、内容等多个业务线。随着用户量增长,后端开发 小崔 发现传统的 Session 方案成了瓶颈:

"每次用户请求都要查 Redis,促销活动期间 QPS 一高,Session 存储就扛不住。"

架构师 白歌 拍板决定引入 JWT 实现无状态认证:

改造后,各微服务无需再查询集中式 Session 存储,只需验证 JWT 签名即可获取用户身份。运维 李眉 也轻松了不少:

"以前扩容要先扩容 Redis,现在服务随便加实例,JWT 自带用户信息,真系快靓正!"

不过白歌也提醒团队注意:JWT 一旦签发,在过期前无法提前撤销,因此 刷新令牌(Refresh Token) 机制和短期有效期必须配合好。前端 黄俪 则负责将 JWT 从 localStorage 迁移到更安全的存储方案,并配合 CSRF 防护。


小结

  • JWT(JSON Web Token) 是紧凑、可打印的声明传递标准,发音为 "jot"。
  • 核心价值在于提供 标准化的容器格式 ,支持身份验证、授权、联邦身份和无状态会话。
  • 由 JOSE 工作组推动,最终形成 JWS、JWE、JWK、JWA、JWT 系列规范。
  • 相比传统 Session Cookie,JWT 更适合分布式架构,但需注意 XSS、签名剥离等安全风险。

在下一篇教程中,我们将深入 JWT 的内部结构,拆解 Header、Payload 和 Signature 的每一个细节。

下一页
JWT 结构详解