Engineering · 1 min read
六個標準宣告各擋一個缺口
簽章只擋竄改。六個標準宣告各擋住一條不同的攻擊路徑。跳過任何一個,對應的缺口就打開。
簽章驗證只回答「誰簽的?」它不證明 token 屬於你的服務,也不證明 token 還有效。每個宣告加一層防護,擋住一個不同的缺口。
| 宣告 | 沒有它會怎樣 |
|---|---|
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 統一加上了全部六個宣告。
「簽章是地基。六個宣告是六面牆。少蓋一面,風就從那裡灌進來。」
參考來源
Related
回到總覽:一次 JWT 稽核背後的七個盲點 · iss 宣告 · 演算法混淆與 none 攻擊 · 存取與刷新令牌輪替 · 時間安全比對