OAuth 2.0 令牌調查
本文探討 OAuth 2.0 令牌調查,一種允許受保護資源查詢授權伺服器以獲取令牌相關元數據的方法,判斷訪問或刷新令牌是否有效。
OAuth 2.0 令牌調查定義了一種方法,允許經授權的受保護資源查詢授權伺服器,以確定與給定令牌(訪問令牌或刷新令牌)相關的元數據,由 OAuth 客戶端提供。根據特定令牌的元數據,它允許資源擁有者訪問受保護資源。
此元數據包括:
- 令牌當前是否有效(或是否已過期或被撤銷)
- 訪問令牌授予的權限(通常通過 OAuth 2.0 範圍傳達)
- 令牌授予的授權上下文(包括授權令牌的是誰以及發布給哪個客戶端)
令牌調查使受保護資源能夠查詢此信息,無論其是否包含在令牌本身中。
根據令牌的編碼方式,可分為兩種類型的訪問令牌:
- 基於識別符:令牌代表授權伺服器數據庫中授權相關聯的隨機且難以猜測的識別符。
- 自主:授權直接編碼在令牌內部,並通過加密技術保護以防篡改。JSON Web Token (JWT) 是這種方法的常見標準。
對於自主令牌,可以直接從訪問令牌解析授權相關元數據。但是,對於基於識別符的令牌,必須使用授權伺服器的令牌調查功能來驗證/檢索元數據。
令牌調查請求
使用基於識別符的訪問令牌需要通過網絡請求向授權伺服器進行驗證。有一個標準協議,稱為 OAuth 2.0 令牌調查 (RFC 7662)。
受保護資源將以 POST 方法將令牌傳遞至授權伺服器的調查端點,並因此接收到包含令牌參數的 JSON 對象。
注意,調查請求不能隨意發起;它們必須滿足以下條件之一:
- 使用憑據 進行身份驗證(必須預先在授權伺服器中註冊),或
- 使用訪問令牌進行授權。
因此,在此特定交互中,受保護的資源成為 OAuth 客戶端,而授權伺服器則成為受保護資源。
以下是調查請求的示例,其中受保護資源使用客戶端 ID 和客戶端密鑰進行身份驗證,這些是註冊為授權伺服器的 OAuth 客戶端后獲得的。
以下是直接使用訪問令牌的調查請求示例。訪問令牌可以直接從 /token
端點獲得,使用已註冊的機器對機器應用程序的憑據和 client_credentials
授權類型。
令牌調查響應
最重要的參數是 active
,它是一個布爾值。如果為 true
,表示令牌有效, JSON 對象將包含其他令牌詳情,如範圍值。如果為 false
,則令牌無效或過期,受保護資源必須返回帶有 invalid_token
錯誤代碼的 401 Unauthorized 響應。
以下是一個有效令牌的響應示例:
除了 active
是必需的,其他所有參數都是可選的。
受保護資源可以使用這些額外字段來確定訪問權限,類似於解析和驗證 JWT 訪問令牌的方式。