Skip to content
All writing Part 04 of 07 · 一次 JWT 稽核背後的七個盲點
Engineering · 1 min read

iss 宣告:簽發者身分

iss 宣告標記誰簽了 token。沒有它,任何拿到同一把密鑰的服務都能簽出合法 token。

iss 代表 issuer。它標記哪個服務建立並簽署了這個 token。

auth-service jwt.sign({ iss: 'auth-service', ... }) auth-service /refresh lobby-service game-server 檢查 iss ✓ 檢查 iss ✓ 檢查 iss ✓ 唯一的簽發者

只有 auth-service 呼叫 jwt.sign。每個驗證端都傳入 issuer: 'auth-service'jwt.verifyiss 值不同的 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 是誰簽的?沒有它,你只知道密鑰對,但不知道簽發者對不對。」

參考來源

回到總覽:一次 JWT 稽核背後的七個盲點 · 六個標準宣告 · 存取與刷新令牌輪替

Tags #jwt #security #authentication
// connect

Be brave | Be wise | Be grateful

21 BreakinCode

// elsewhere
LinkedInMedium (lang: en)Youtube
wh:~$William Hung· © 2026 Taipei · GMT+8 · Available for collaboration