點擊每頁的左下角 圖標可全屏播放。

OIDC內省端點與JWT權杖驗證

深入解析兩者之間的關係與權衡

版本/日期:v1.1 / 2025-08-21
製作單位:中央授權中心 開發維運團隊


目錄

  1. 兩種主流驗證機制
  2. JWT權杖驗證
  3. OIDC內省端點
  4. 關係與選擇:權衡的藝術
  5. 如何選擇?應用場景策略
  6. 總結與感謝

兩種主流的權杖驗證機制

在 OAuth 2.0 / OIDC 的世界中,保護 API 資源的第一步,就是驗證客戶端帶來的「通行證」(Access Token) 是否有效。

🚀

JWT 權杖驗證

自包含、去中心化
權杖本身攜帶所有驗證資訊,資源伺服器可獨立完成驗證,無需請求授權中心。

🕵️

OIDC 內省端點

遠端查詢、中心化
資源伺服器向授權中心發起查詢,由授權中心告知權杖的當前狀態。


JWT權杖驗證:本地、高效

方法:驗證一張「自證身份」的智慧卡

  • 簽章驗證 (Signature): 使用授權伺服器的公鑰,確認卡片未被偽造或竄改。
  • 宣告驗證 (Claims): 檢查卡片上的印刷資訊是否合規。
    • iss (簽發者): 是不是官方發的卡?
    • aud (接收者): 這張卡是給我的嗎?
    • exp (過期時間): 卡片過期了沒有?
// JWT 結構: Header.Payload.Signature
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
                    

JWT權杖驗證:優點與挑戰

👍 優點 (Pros)

  • 高效能:驗證在本地完成,無網路延遲,適合高流量的微服務架構。
  • 去中心化:資源伺服器不依賴授權伺服器的即時連線,降低單點故障風險。

👎 缺點 (Cons)

  • 無法即時撤銷:權杖一旦簽發,在過期前都有效。若權杖洩漏,攻擊者可持續使用直到過期。

OIDC內省端點:遠端、準確

方法:打電話回總部確認通行證狀態

  • 發送請求:資源伺服器拿著權杖,向授權伺服器的 /introspect 端點發起請求。
  • 伺服器驗證:授權伺服器在中央資料庫中查詢權杖的即時狀態。
  • 返回結果:回傳一個簡單的 JSON,明確告知權杖是否 active
// 資源伺服器發起請求
POST /connect/introspect HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <base64(APIResoureName|Secret)>

token=<access_token>
// 授權伺服器返回結果
HTTP/1.1 200 OK Content-Type: application/json
{
  "active": true,
  "aud": "<APIResourceName>",
  "scope": "<API Scope>",
  "client_id": "<使用的client_id>",...... 
  "exp": <失效時間截>
}

OIDC內省端點:優點與挑戰

👍 優點 (Pros)

  • 即時撤銷:由於每次都查詢中央,權杖一旦被撤銷(如使用者登出),會立即失效,安全性更高。
  • 支援不透明權杖:對於非JWT格式的參考權杖 (Reference Token),這是唯一的驗證方式。

👎 缺點 (Cons)

  • 效能瓶頸:每次請求都需網路往返,增加延遲,可能成為授權伺服器的效能瓶頸。
  • 中心化依賴:若授權伺服器故障或網路不通,所有資源都將無法驗證,影響範圍廣。
  • 增加管理負擔:每個呼叫內省端點的資源伺服器,本身也需要一組ID與密鑰 (API Resource Name/Secret,標準文檔此處為:Client ID/Secret) 來向授權伺服器進行身份驗證,增加了部署與維護的複雜度。

關係與選擇:權衡的藝術

特性
JWT 本地驗證
OIDC 內省端點
驗證方式
本地、去中心化
遠端、中心化
效能
高,低延遲 🚀
較低,有網路延遲 🐌
即時撤銷
困難 ❌
容易 ✅
管理複雜度
低 (僅需公鑰)
較高 (需管理客戶端憑證)
依賴性
依賴公鑰快取
強依賴授權伺服器

如何選擇?應用場景策略

  • 🚀 高效能場景優先選 JWT:
    對於絕大多數讀取操作或內部微服務呼叫,JWT 的高效能是首選。可通過縮短權杖有效期(如5-15分鐘)來平衡安全風險。
  • 🛡️ 關鍵操作使用內省:
    對於支付、修改權限、刪除資料等高風險操作,即使是 JWT,也應在執行前額外呼叫內省端點進行二次確認,確保萬無一失。
  • 🤝 混合模式:
    在一個系統中,根據 API 的重要性混合使用。例如,查詢使用者資料用 JWT,修改密碼則強制內省驗證。
  • ❓ 提供兼容選項:
    本中心預設發行自包含的 JWT 權杖。但若對接的客戶端系統因技術限制(如舊系統、特定框架)而無法解析 JWT,我們可為其特例配置發行「參考權杖 (Reference Token)」。該客戶端則必須使用內省端點來驗證權杖的有效性。