Skip to content
所有文章 ‹ Part 03 of 07 · 一次 JWT 稽核背後的七個盲點
工程 · 1 min read

六個標準宣告各擋一個缺口

簽章只擋竄改。六個標準宣告各擋住一條不同的攻擊路徑。跳過任何一個,對應的缺口就打開。

簽章驗證只回答「誰簽的?」它不證明 token 屬於你的服務。也不證明 token 還有效。每個宣告加一層防護,擋住一個不同的缺口。

Signature 沒有被竄改 alg pin 正確的演算法 iss 正確的簽發者 aud 正確的接收者 sub 正確的身分 exp 還在有效期內 jti 沒有被重送 跳過任何一層 → 對應的缺口打開
宣告沒有它會怎樣
alg(server 端 pin)攻擊者換成 none 或 RS256→HS256
iss(簽發者)別的服務用同一把密鑰簽的 token 也通過
aud(受眾)refresh token 能當 access token 用
sub(主體)消費端必須知道自訂 claim 的名稱
exp(到期時間)偷到的 token 永遠有效
jti(JWT ID)消費端偵測不到重送的同一個 token

稽核中的發現: 稽核前,auth-service 簽 token 時沒有放 iss 和 aud。消費端驗證時也沒有 pin 演算法。修復後,透過 shared-contracts 統一加上了全部六個宣告。

「簽章是地基。六個宣告是六面牆。少蓋一面,風就從那裡灌進來。」

參考來源

回到總覽:一次 JWT 稽核背後的七個盲點 · iss 宣告 · 演算法混淆與 none 攻擊 · 存取與刷新令牌輪替 · 時間安全比對

↑↓ 移動 ↵ 開啟 esc 關閉