iT邦幫忙

2022 iThome 鐵人賽

DAY 15
3
Software Development

30 天與九頭蛇先生做好朋友系列 第 15

如何取得 Access Token 的資訊

  • 分享至 

  • xImage
  •  

Access Token 用來存取受保護資源的憑證。通常 Access Token 都是屬於不透明的 Token,Hydra 預設也是這麼設計的。必須要拿 Access Token 向 Hydra 請求才能取得使用者的相關資訊。這在 OpenID Connect Core 1.0 - 5.3. UserInfo Endpoint 裡有明確定義 OP 應該要提供什麼公開接口讓 RP 取得使用者資訊。Hydra SDK 的 Public API 物件雖然有提供呼叫的方法,但因為它的 Model 所呈現的資料並不完整,因此建議自己打 API 取得資料比較好。API 位址如下:

http://127.0.0.1:4444/userinfo

對應的範例程式如下:

$userinfoEndpoint = $hydra->getConfig()->getHost() . '/userinfo';

$userInfo = Http::withToken($tokenResponse->getAccessToken())
    ->get($userinfoEndpoint);

Log::debug('User info: ', $userInfo->json());

這裡使用 Laravel 的 HTTP Facase 完成請求,關鍵是要設定 Access Token 後,才能呼叫對應的 API。而最後 Log 所印出來的 JSON 內容如下:

{
  "aud": [
    "my-rp"
  ],
  "auth_time": 1664528077,
  "iat": 1664528079,
  "iss": "http://127.0.0.1:4444/",
  "rat": 1664528071,
  "sub": "1"
}

這裡的 sub 與 ID Token 的 sub 意義相同。實際上這裡的內容,是取得 Hydra 保存在 Session(指的是資料庫)裡的資料,然後經過過濾出來的。而 Session 的資料可以在 Consent Provider 處理同意請求的時候,再將想放的資訊放入。

協定上只有規定 sub 是必填,如果請求回應是 JWT 則需要提供 audiss 資訊,其他內容就沒有特別強制的要求,但有預定義有哪些相關的使用者個人資料

Token 自我檢查

userinfo 主要是在取得使用者相關的資料,但好像還少了些什麼,像 exp 欄位就沒有提供,因此無法知道相關的資訊。

Hydra 有實作 RFC 7662 - OAuth 2.0 Token Introspection,中文可以稱為 Token 自我檢查,可以檢查 Token 的狀態,包括 Access Token 或 Refresh Token。

Hydra 這個 API 是放在 Admin API 的,所以要換取得 Admin API 的設定:

$introspectToken = $admin->introspectOAuth2Token($tokenResponse->getAccessToken());

Log::debug('Token Introspection: ', json_decode((string)$introspectToken, true));

Log 取得的內容如下:

{
  "active": true,
  "aud": [],
  "client_id": "my-rp",
  "exp": 1664535594,
  "iat": 1664531994,
  "iss": "http://127.0.0.1:4444/",
  "nbf": 1664531994,
  "scope": "openid",
  "sub": "1",
  "token_type": "Bearer",
  "token_use": "access_token"
}

這個跟 JWT 的 Claim 很相似,主要多了幾個欄位,像 scopetoken_type,這兩個是之前身分驗證回應的資訊,這裡就不重覆做說明;而 token_use原始碼的描述與值看起來,也算是一種 Token 的類型,不過比較像是不同的授權流程所產生的結果,像是 access_tokenrefresh_token

今天 Access Token 的主題比較簡單,到這裡先結束。目前看到的資訊都是 Hydra 的標配內容,接下來明天就會讓 Provider 來多做一些客製化,來順利傳額外的資訊。


上一篇
如何驗證 ID Token 的資訊
下一篇
ID Token 的驗證實作
系列文
30 天與九頭蛇先生做好朋友23
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言