JWT 身份认证的工作原理——无需会话的令牌 · 思维导图

JWT 身份认证的工作原理——无需会话的令牌. 可编辑的思维导图,以彩色分支、子主题和曲线连接呈现想法。 曲线表示联系;只有方向重要时才使用箭头。

JSON Web Token 是一份签了名、自带全部信息的身份声明:服务器在登录时生成它一次,此后每一次请求都靠这个令牌自证身份,而不必再去查会话。

JWT 身份认证的工作原理——无需会话的令牌 · 思维导图

The interactive MindMap canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.

如何阅读这张思维导图

  • 从中心主题开始,沿着彩色分支探索相关想法。
  • 曲线表示联系;只有方向重要时才使用箭头。

Sign in

这一分支汇集 “User submits email and password”, “Credentials valid?”, “Sign-in rejected”, “Server verifies the credentials against the database”.

Build token

这一分支汇集 “A JWT is three dot-separated parts: a header (algorithm), a payload of claims (who the user is, when the token expires), and a signature. The payload is readable by anyone — it is not secret, it is tamper-evident.”, “Server signs the token with its secret key”.

Client carries JWT

这一分支汇集 “Client receives the JWT and stores it”, “Client sends the JWT in the Authorization header”.

Verify

这一分支汇集 “Because the server never stores session state, this check is what makes JWT authentication “stateless” — no session table to look up on every request.”, “Signature valid and not expired?”.

Authorize or reject

这一分支汇集 “Server trusts the claims and processes the request”, “Request rejected with 401”.

跨分支联系

一个 JWT 由三段组成——头部、载荷、签名——用点连接;载荷可读,但改动即可被发现。

签名把身份变成一项能力:持有一个有效且未过期的令牌,就是这次请求通过认证的依据。

校验是无状态的——重新计算签名取代了查会话表。

令牌必须由客户端妥善保存,并随每一次请求发送,因此它的过期时间才是真正的安全边界。

JWT 和 OAuth 是配合关系:OAuth 决定客户端可以做什么,JWT 则是承载这份授权的令牌的一种常见格式。

Key relationships and takeaways

  • 一个 JWT 由三段组成——头部、载荷、签名——用点连接;载荷可读,但改动即可被发现。
  • 签名把身份变成一项能力:持有一个有效且未过期的令牌,就是这次请求通过认证的依据。
  • 校验是无状态的——重新计算签名取代了查会话表。
  • 令牌必须由客户端妥善保存,并随每一次请求发送,因此它的过期时间才是真正的安全边界。
  • JWT 和 OAuth 是配合关系:OAuth 决定客户端可以做什么,JWT 则是承载这份授权的令牌的一种常见格式。

When to use this visual

  • 向一支新的后端团队讲清楚为什么不需要会话表,以及签名到底证明了什么。
  • 为一个横向扩展时共享状态很痛苦的服务,在 JWT 和服务端会话之间做取舍。
  • 在微服务里信任一个令牌之前,先审查它的声明——过期时间、签发者、受众。

运作方式

  1. 调整中心主题

    根据项目或课程修改中心主题的名称。

  2. 扩展分支

    编辑想法并添加示例或注释。

  3. 连接相关想法

    绘制跨分支连接;只有方向重要时才使用箭头。

常见问题

JWT 是什么,里面装了什么?

JSON Web Token 是一个由三段用点分隔的字符串:一段头部,写明签名算法;一段载荷,装着关于用户和令牌有效期的声明;还有一段签名。头部和载荷是 base64 编码的 JSON——任何人都能读——而签名的作用,是让它们在没有签名密钥的情况下无法被改动。

为什么说 JWT 身份认证是无状态的?

因为服务器不保存关于会话的任何东西。每一次请求都带着令牌到来,服务器当场校验签名和过期时间。没有会话表要查,也没有状态需要在多台服务器之间复制,这正是这种做法能横向扩展的原因。代价是:不额外加一套机制的话,令牌在过期之前无法吊销。

载荷谁都能读,JWT 还安全吗?

能读和可信是两回事。载荷没有加密——不要把秘密放进去——但签名意味着任何修改都会让令牌失效,所以客户端无法擅自改写自己的声明。传输安全由 HTTPS 承担;而令牌所能访问的数据,则由资源服务器强制执行这些声明来保护。

JWT 和 OAuth 是什么关系?

它们解决的是问题的不同一半。OAuth 是授权协议——规定客户端如何获得许可和令牌。JWT 是一种令牌格式。实践中 OAuth 的访问令牌常常就是 JWT:授权服务器签发一个承载权限范围的 JWT,资源服务器负责校验。这张画布讲的是身份认证那一半,OAuth 那张图解讲的是委托那一半。

在 QueryChart 中编辑此思维导图

在可编辑画布中打开思维导图。移动想法、添加分支并绘制连接。

在 QueryChart 中编辑此思维导图

思维导图中的更多内容