Engineering · 1 min read
iss 宣告:簽發者身分
iss 宣告標記誰簽了 token。沒有它,任何拿到同一把密鑰的服務都能簽出合法 token。
iss 代表 issuer。它標記哪個服務建立並簽署了這個 token。
只有 auth-service 呼叫 jwt.sign。每個驗證端都傳入 issuer: 'auth-service' 給 jwt.verify。iss 值不同的 token 直接被拒絕。
它防住什麼,「同一把密鑰、不同簽發者」的缺口:
沒有 iss: 有 iss:
debug-tool 簽了一個 token debug-tool 簽(iss:'debug-tool')
→ lobby-service 接受 ✗ → iss != 'auth-service' → 拒絕 ✓
如果第二個服務拿到同一把密鑰去簽 token,只有 iss 能擋住這些 token 通過驗證。
| 宣告 | 回答的問題 |
|---|---|
iss | 誰建立了這個 token? |
aud | 這個 token 給誰用? |
sub | 這個 token 關於誰? |
稽核中的發現: 稽核前,auth-service 簽 token 時沒有放
iss。修復後,透過 shared-contracts 加上iss: 'auth-service'。
「
iss回答一個問題:這個 token 是誰簽的?沒有它,你只知道密鑰對,但不知道簽發者對不對。」
參考來源
Related
回到總覽:一次 JWT 稽核背後的七個盲點 · 六個標準宣告 · 存取與刷新令牌輪替