繁體中文(香港)
  • oauth 2.0
  • token introspection
  • access token
  • refresh token
  • opaque token

OAuth 2.0 token introspection

本文探討 OAuth 2.0 token introspection,一種方法允許受保護的資源查詢授權伺服器以獲取 token 元數據,從而確定訪問或刷新 token 是否有效。

Darcy Ye
Darcy Ye
Developer

OAuth 2.0 token introspection 定義了一種方法,允許已獲授權的受保護資源查詢授權伺服器,以確定由 OAuth 用戶端提供的給定 token(無論是訪問 token 還是刷新 token)的元數據。根據特定 token 的元數據,它允許資源擁有者訪問受保護的資源。

這些元數據包括:

  • token 目前是否有效(或已過期或被撤銷)
  • 訪問 token 授予的權限(通常通過 OAuth 2.0 範圍傳達)
  • 授權 token 授權的上下文(包括誰授權了 token 以及 token 發放給哪個客戶端)

Token introspection 使受保護資源能夠查詢這些資訊,無論這些資訊是否包含在 token 本身內。

根據編碼方式,訪問 token 有兩種類型:

  • 識別符號型:token 代表一個難以猜測的隨機識別符,與授權伺服器資料庫中的授權相關。
  • 自包含型:授權編碼在 token 本身內,並通過加密技術保護以防篡改。JSON Web Token (JWT) 是這種方法的常見標準。

對於自包含型 token,授權相關的元數據可以直接從訪問 token 中解析。然而,對於識別符號型 token,必須使用授權伺服器的 token introspection 功能來驗證/檢索元數據。

Token introspection request

使用識別符號型訪問 token 需要通過網絡請求與授權伺服器進行驗證。有一個名為 OAuth 2.0 Token Introspection (RFC 7662) 的標準協議。

受保護資源將發送 POST 請求至授權伺服器的 introspection 端點,並接收到包含該 token 參數的 JSON 對象。

請注意,introspection 請求不能隨意發起,必須滿足以下其中一個條件:

  • 使用(必須在授權伺服器預註冊的)憑據認證,或
  • 使用訪問 token 授權。

因此,在這種特定互動中,受保護資源成為 OAuth 客戶端,而授權伺服器成為受保護資源。

以下是一個 introspection 請求的例子,其中受保護資源使用客戶端 ID 和客戶端密碼進行身份驗證,這些是在註冊為授權伺服器的 OAuth 客戶端後獲得的。

以下是一個直接使用訪問 token 的 introspection 請求的例子。訪問 token 可以通過使用已註冊的 machine-to-machine 應用程式的憑據和 client_credentials 授權類型直接從 /token 端點獲得。

Token introspection response

最重要的參數是 active,它是一個布林值。如果為 true,則表示 token 有效,且 JSON 對象將包含其他 token 詳細資訊,如範圍值。如果為 false,則 token 無效或過期,受保護資源必須返回一個 401 Unauthorized 響應,帶有 invalid_token 錯誤代碼。

這是一個有效 token 的響應示例:

active 外,其餘所有參數都是可選的。

受保護資源可以使用這些附加字段來確定訪問權限,類似於解析和驗證 JWT 訪問 token 的方式。