呼叫 OpenID Connect 的內部檢查端點
內部檢查端點可讓存取記號的持有者向簽發存取記號的「OpenID Connect 提供者」,要求存取記號的一組相關 meta 資料。存取記號必須是透過 OpenID Connect 或 OAuth 鑑別所取得的存取記號。
開始之前
關於這項作業
存取記號內要用於 OpenID Connect 和 OAuth 2.0 中的資訊,是用戶端看不到的。這可讓受保護資源或用戶端,根據「OpenID Connect 提供者」所傳回的存取記號相關 meta 資料,來做出授權決策。
啟用 OpenID Connect 的 Liberty 伺服器能夠存取位於下列 URL 的 OpenID Connect 內部檢查端點:
https://server.example.com:443/oidc/endpoint/<provider_name>/introspect
如果您必須使用 Proxy 來存取「OpenID Connect 提供者 (OP)」,您針對任何 OP 相關 URL 內容所輸入的值,必須包含 Proxy 主機和埠,而不是包含外部 OP 主機和埠。
在大部分情況下,您可以用 Proxy 主機和埠,取代 OP 主機和埠。RP 和用戶端(瀏覽器或應用程式)必須都能看見您所輸入的 URL。對於如何判斷所要使用的正確 URL,如需進一步指引,請聯絡您的 Proxy 管理者。
在本例中,用戶端預期的 SSL 埠設為 443。
程序
- 在 GET 或 POST 要求的 HTTP Basic Authorization 標頭中,使用已登錄「OpenID Connect 用戶端」的用戶端 ID 和密碼,來設定用戶端鑑別。用戶端 ID 和密碼是用 application/x-www-form-urlencoded 編碼演算法來編碼。使用已編碼的用戶端 ID 作為使用者名稱,使用已編碼的密碼作為密碼。
- 將存取記號的字串值當成參數,包含在要傳給內部檢查端點的 GET 或 POST 要求中。
- 將 GET 或 POST 要求傳送給內部檢查端點 URL。
結果
如果是有效的要求,內部檢查端點會傳回 HTTP 200 回應,內含一個 application/json 格式的 JSON 物件,視存取記號是作用中或已過期而定,該物件會包含下列資訊。
如果存取記號為作用中,端點會傳回 active:true,且 JSON 物件還包含下列額外資訊:
- active:此布林指示器指出存取記號是否為作用中。
- client_id:要求存取記號之「OpenID Connect 用戶端」的用戶端 ID。
- sub:授權存取記號的資源擁有者。
- scope:該存取記號相關聯的範圍清單(以空格區隔)。
- iat:從 1970 年 1 月 1 日 UTC(世界標準時間)算起的存取記號簽發時間戳記(整數),以秒為測量單位。
- exp:從 1970 年 1 月 1 日 UTC(世界標準時間)算起的存取記號到期時間戳記(整數),以秒為測量單位。
- realmName:資源擁有者的領域名稱。
- uniqueSecurityName:資源擁有者的唯一安全名稱。
- tokenType:存取記號類型。對於 OpenID Connect,此值是 Bearer。
- grant_type:此字串指出所產生之存取記號的許可類型。可能的值是:authorization_code、password、refresh_token、client_credentials、resource_owner、implicit 和 urn:ietf:params:oauth:grant-type:jwt-bearer。
如果存取記號過期,但是所提供的鑑別還有效,或者如果所提供的存取記號是錯誤類型,端點會在 JSON 物件中傳回 active:false。
範例
這裡顯示範例要求:
POST /register HTTP/1.1
Accept: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3
token=SOYleDziTitHeKcodp6vqEmRwKPjz3lFZTcsQtVC
作用中存取記號的範例回應:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"exp" : 1415307710,
"realmName" : "BasicRealm",
"sub" : "testuser",
"scope" : "openid scope2 scope1",
"grant_type" : "authorization_code",
"uniqueSecurityName" : "testuser",
"active" : true,
"token_type" : "Bearer",
"client_id" : "pclient01",
"iat" : 1415307700
}
過期存取記號的範例回應:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store
{
"active":"false"
}