呼叫 OpenID Connect 的內部檢查端點

內部檢查端點可讓存取記號的持有者向簽發存取記號的「OpenID Connect 提供者」,要求存取記號的一組相關 meta 資料。存取記號必須是透過 OpenID Connect 或 OAuth 鑑別所取得的存取記號。

開始之前

當資源服務或用戶端應用程式呼叫內部檢查端點時,它必須將自己當成一般的 OAuth 2.0 用戶端登錄到 OpenID Connect 伺服器中。已登錄用戶端的 meta 資料必須包含 introspectTokens = true 屬性。

關於這項作業

存取記號內要用於 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 RP 不提供任何方法來自動透過 Proxy 主機遞送要求。

如果您必須使用 Proxy 來存取「OpenID Connect 提供者 (OP)」,您針對任何 OP 相關 URL 內容所輸入的值,必須包含 Proxy 主機和埠,而不是包含外部 OP 主機和埠。

在大部分情況下,您可以用 Proxy 主機和埠,取代 OP 主機和埠。RP 和用戶端(瀏覽器或應用程式)必須都能看見您所輸入的 URL。對於如何判斷所要使用的正確 URL,如需進一步指引,請聯絡您的 Proxy 管理者。

在本例中,用戶端預期的 SSL 埠設為 443。

程序

  1. GETPOST 要求的 HTTP Basic Authorization 標頭中,使用已登錄「OpenID Connect 用戶端」的用戶端 ID 和密碼,來設定用戶端鑑別。用戶端 ID 和密碼是用 application/x-www-form-urlencoded 編碼演算法來編碼。使用已編碼的用戶端 ID 作為使用者名稱,使用已編碼的密碼作為密碼。
  2. 將存取記號的字串值當成參數,包含在要傳給內部檢查端點的 GETPOST 要求中。
  3. GETPOST 要求傳送給內部檢查端點 URL。

結果

完成這些步驟之後,您已具有有效的 HTTP 要求,且將傳送給內部檢查端點,如「範例」區段所示。

如果是有效的要求,內部檢查端點會傳回 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_codepasswordrefresh_tokenclient_credentialsresource_ownerimpliciturn:ietf:params:oauth:grant-type:jwt-bearer

如果存取記號過期,但是所提供的鑑別還有效,或者如果所提供的存取記號是錯誤類型,端點會在 JSON 物件中傳回 active:false

註: 對於執行存取記號內部檢查的用戶端或資源服務,該用戶端或資源服務必須將自己當成用戶端登錄到 OpenID Connect 提供者中,且用戶端 meta 資料必須將 introspect_tokens 設為 true

範例

下列顯示作用中存取記號和過期存取記號的範例,以及一項要求。

這裡顯示範例要求:

  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"
 }

指示主題類型的圖示 作業主題

檔名:twlp_oidc_introspection_endpoint.html