什麼是權杖內省 (Token introspection)?
權杖內省 (Token introspection) 是在 RFC 7662 中定義的 OAuth 2.0 擴展,允許 客戶端 (clients) 查詢 授權伺服器 (Authorization server) 以驗證訪問權杖 (access tokens) 並獲取其元數據。當發生以下情況時,此擴展特別有用:
- 客戶端想要實時驗證訪問權杖 (access token) 的有效性。
- 訪問權杖 (access token) 是 不透明的 (opaque) (不是自包含的)並且需要授權伺服器 (authorization server) 來驗證。
權杖內省 (Token introspection) 如何運作?
以下是一個權杖內省 (token introspection) 請求的非常規範示例:
POST /introspect HTTP/1.1
Host: authorization-server.example.com
Content-Type: application/x-www-form-urlencoded
token=random-token-value
&token_type_hint=access_token
token_type_hint
參數是可選的,應設置為正在內省的權杖類型。如果訪問權杖 (access token) 有效,授權伺服器 (authorization server) 將會響應權杖的元數據:
HTTP/1.1 200 OK
Content-Type: application/json
{
"active": true,
"scope": "read write",
"client_id": "client-id",
"username": "johndoe",
"token_type": "Bearer",
"exp": 1634020800,
"iat": 1634017200
}
值得注意的是,並非所有授權伺服器 (authorization servers) 都支持權杖內省 (token introspection),且並非所有權杖都是可內省的。 授權伺服器 (Authorization server) 可能會根據各種因素限制權杖內省 (token introspection) 的使用,例如,某些授權伺服器 (authorization servers) 可能不支持對 JWTs 的內省。
權杖內省 (Token introspection) 請求中的關鍵參數
以下是權杖內省 (token introspection) 請求中的兩個關鍵參數:
token
: 要內省的權杖。token_type_hint
: 正在內省的權杖類型。可以是access_token
或refresh_token
。