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 與伺服器端工作階段之間做選擇。
- 在微服務裡信任一個權杖之前,先覆核它的聲明——有效期、簽發者、受眾。
運作方式
調整中央主題
按項目或課堂修改中央主題名稱。
擴展分支
編輯概念並加入例子或註解。
連結相關概念
畫出跨分支連結;只有方向重要時先用箭嘴。
常見問題
甚麼是 JWT?它裡面有甚麼?
JSON Web Token 是一串以句點分隔成三段的字串:一段標頭,說明簽章演算法;一段內容區,載有關於用戶以及權杖存活時間的聲明;以及一段簽章。標頭與內容區是經過 base64 編碼的 JSON——任何人都讀得到——而簽章就是令它們無法在沒有簽章密鑰的情況下被改動的東西。
為甚麼 JWT 身分驗證叫做無狀態?
因為伺服器對這個工作階段甚麼都不儲存。每一個請求都帶著權杖到達,伺服器就地驗證簽章與有效期。沒有工作階段表需要查詢,也沒有狀態需要在多台伺服器之間複製,而這正是這套做法可以橫向擴展的原因。代價是:如果沒有額外的機制,一個權杖在到期之前無法被撤銷。
如果任何人都讀得到內容區,JWT 還安全嗎?
讀得到與可以信任是兩回事。內容區並沒有加密——不要把秘密放進去——但簽章意味著任何改動都會令權杖失效,所以用戶端無法更改自己的聲明。傳輸的安全性靠權杖在 HTTPS 之內傳送,而它所開啟的資料,則由資源伺服器執行那些聲明來保護。
JWT 與 OAuth 有甚麼關係?
它們解決的是問題的不同一半。OAuth 是授權協議——用戶端如何取得權限與權杖。JWT 則是一種權杖格式。實務上 OAuth 的存取權杖往往就是 JWT:授權伺服器簽發一個載有授權範圍的 JWT,而資源伺服器負責驗證它。這張畫布講的是身分驗證那一半;OAuth 那張圖解講的是委託那一半。
喺 QueryChart 編輯呢張心智圖
喺可編輯畫布開啟心智圖。移動概念、加入分支同畫連結。