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