呼叫 OpenID Connect 的 UserInfo 端點
UserInfo 端點會針對接受 OpenID Connect 鑑別程序鑑別的使用者,傳回其相關聲明。
關於這項作業
為了取得使用者的聲明,用戶端以存取記號作為認證,對 UserInfo 端點發出要求。存取記號必須是透過 OpenID Connect 鑑別所取得的存取記號。存取記號所代表之使用者的聲明,會以 JSON 物件形式傳回,其中含有聲明的名稱/值配對集合。UserInfo 端點是一種 OAuth 2.0 受保護資源,也就是說,存取端點所需的認證就是存取記號。
UserInfo 端點傳回的聲明可以使用「OpenID Connect 提供者」配置來自訂;請參閱配置 UserInfo 端點所傳回的聲明。
啟用 OpenID Connect 的 Liberty 設定檔伺服器能夠存取位於下列 URL 的 OpenID Connect UserInfo 端點:
https://server.example.com:443/oidc/endpoint/<provider_name>/userinfo
註: 在本例中,OP 的 SSL 埠預期是 443。
程序
- 使用透過 OpenID Connect 鑑別取得的存取記號,來設定鑑別。可以在 HTTP Basic Authorization 標頭中或使用 access_token 要求參數,來提供存取記號。無論何者,存取記號都不需要編碼。
- 將 GET 或 POST 要求傳送給 UserInfo 端點 URL。
結果
如果是有效的要求,UserInfo 端點會傳回 HTTP 200 回應,內含一個 application/json 格式的 JSON 物件,該物件會包含配置給「OpenID Connect 提供者」的聲明。
範例
下列範例說明具有有效記號和無效記號的要求。
- 使用 HTTP Bearer Authorization 標頭來傳遞存取記號的要求
- 對於有效存取記號的回應
- 無效的存取記號
使用 HTTP Bearer Authorization 標頭來傳遞存取記號的範例要求:
POST /register HTTP/1.1
Accept: application/x-www-form-urlencoded
Authorization: Bearer fAAdLO1c6QWDbPs9HrWHz5e7nRWVAnxqTTP7i88G
也可以使用
access_token 要求參數來傳遞記號:
POST /register HTTP/1.1
Accept: application/x-www-form-urlencoded
access_token=fAAdLO1c6QWDbPs9HrWHz5e7nRWVAnxqTTP7i88G
最佳作法是使用 HTTP Authorization 標頭,而不使用 access_token 要求參數,這是因為可能含有機密性資訊的 HTTP 要求參數可以儲存在瀏覽器歷程或快取中。
這裡是有效存取記號的範例回應。一律會傳回 sub 和 groupIds 聲明。這裡顯示的其他聲明,是「OpenID Connect 提供者」的預設聲明。
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
Pragma: no-cache
{
"sub" : "bob",
"groupIds" : [ "bobsdepartment","administrators" ],
"given_name" : "Bob",
"name" : "Bob Smith",
"email" : "bob@mycompany.com",
"phone_number" : "+1 (604) 555-1234;ext5678",
"address" : { "formatted" : "123 Main St., Anytown, TX 77777" },
"picture" : "http://mycompany.com/bob_photo.jpg"
}
如果是無效的存取記號,UserInfo 端點會傳回
HTTP 401 狀態碼,且 WWW-AUTHENTICATE 標頭中會有一則錯誤訊息。
HTTP/1.1 401 Unauthorized
CONTENT-LENGTH : 0
WWW-AUTHENTICATE : Bearer error=invalid_token,
error_description=CWWKS1617E: 使用無法辨識的存取記號提出 userinfo 要求。要求 URI 是 /oidc/endpoint/MyOAuthProvider/userinfo。