跳至主要内容

Token Revocation & Logout

Token Revocation 指的是在 Token 尚未自然過期之前,使其提前失效的能力。

觸發時機

  • 使用者主動登出
  • 權限或角色發生變更
  • 偵測到異常行為或風險事件
  • 系統進行安全事件回應
  • 管理者主動停用帳號或租戶

對於 Opaque Token 而言,撤銷是一個直接操作:只要將對應的伺服器端狀態標記為失效或刪除,後續請求即會被拒絕。

但是對於 JWT,撤銷 Token 是一個特別的議題:由於 JWT 是自帶語意且可離線驗證的憑證,一旦簽發,就無法單方面使其失效。

實務上只能透過縮短有效期限、建立黑名單、或在關鍵節點重新驗證來降低風險,但這些手段都屬於補償機制,而非真正的撤銷。

黑名單

  1. 當用戶登出或權限被取消時,將該 Token 的唯一識別碼(jti)存入一個快速查詢的資料庫(如 Redis)。
  2. 資源伺服器拿到 Token,先驗證簽章與時間(基本校驗)。
  3. 去 Redis 查一下這個 jti 是否在黑名單中。

但是這樣就沒有使用 JWT 的特性了,頂多是把解碼流程分散到各個伺服器節點上。

金鑰滾動與版本號

  1. 在 Token 的 Payload 放入一個 version: 1。並在用戶資料庫登記 current_version: 2。如果 Token 版本小於資料庫版本,則拒絕。
  2. 如果發現大規模洩漏,直接更換簽署用的私鑰。這會導致所有舊私鑰簽發的 Token 立即集體失效。
機制撤銷速度系統負擔適用場景
Blacklisting立即中 (需查 Redis)處理用戶主動登出
Session Check立即高 (頻繁查 DB)金融交易、高敏感操作
Version/Key立即密碼變更、大規模安全事件