呼叫 OpenID Connect 的授權端點

在 OpenID Connect 中,授權端點會處理使用者的鑑別和授權。

開始之前

例如,從瀏覽器內的用戶端應用程式,或從用 Scripting 語言(例如 Javascript)來實作的用戶端應用程式,來啟動授權端點時,不需要將 Liberty 伺服器配置成「OpenID Connect 用戶端」。

關於這項作業

即使鑑別要求所包含的參數同時用 OAuth 2.0OpenID Connect 1.0 兩種規格來定義,授權端點也可接受它。

在「授權碼流程」中,授權端點用於鑑別和授權,且會傳回授權許可給用戶端。接著,用戶端可將這項授權許可放在要求中傳遞給記號端點,以交換 ID 記號、存取記號和更新記號。在「隱含流程」中,授權端點仍會執行鑑別和授權,但也會將 ID 記號和存取記號直接放在其回應中傳回給用戶端;不與記號端點執行互動。

啟用 OpenID Connect 的 Liberty 伺服器能夠存取位於下列 URL 的 OpenID Connect 授權端點:

 https://server.example.com:443/oidc/endpoint/<provider_name>/authorize
避免問題: 如果您使用出埠 Proxy,請注意, OpenID Connect RP 不提供任何方法來自動透過 Proxy 主機遞送要求。

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

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

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

程序

  1. 準備 HTTP GET 或 POST 要求,且其中含有下列的必要與建議參數。
    • scope:(必要)OpenID Connect 要求中必須含有 openid 範圍值。也可以呈現其他範圍
    • response_type:(必要)判定要使用的授權處理流程。如果使用「授權碼流程」,此值是 code。如果使用「隱含流程」,此值是 id_token tokenid_token。當值是 id_token 時,不會傳回存取記號
    • client_id:(必要)「OpenID Connect 提供者」中的有效用戶端 ID。
    • redirect_uri:(必要)回應要送往的重新導向 URI。此值必須完全符合 OP 中的已登錄用戶端重新導向 URI 值之一。
    • state:(建議)用來維護要求和回呼間之狀態的不透明值。
    • nonce:(若為「隱含流程」,則是必要的):用來使用戶端階段作業與 ID 記號產生關聯,並紓解重播攻擊的字串值。

    您可以在要求中包含更多參數。如需其他支援參數的說明,請參閱 OpenID Connect Core 1.0 規格。

    我們不只支援 id_token response_type。如果使用隱含流程,必須一律使用 id_token token,且會傳回存取記號。

  2. 將 GET 或 POST 要求傳送給授權端點 URL。

結果

完成這些步驟之後,您已具有有效的 HTTP 要求,且將傳送給授權端點。授權端點以「範例」區段說明的方式傳回回應。

一旦「OpenID Connect 提供者」收到用戶端的要求,會嘗試鑑別和授權使用者。

在「授權碼流程」中,如果鑑別和授權成功,「OpenID Connect 提供者」會簽發授權碼,並當成參數包含在要傳給用戶端的「OAuth 2.0 授權回應」中。如果起始要求中含有 state,授權回應也會包含起始要求中所包含的確切 state 值。如果使用 application/x-www-form-urlencoded 格式,會將 codestate 參數當成查詢參數,新增至授權要求所指定的 redirect_uri 值中。

在「隱含流程」中,如果鑑別和授權成功,授權端點會傳回下列參數。

  • access_token:存取記號。除非起始要求中的 [response_type] 值是 [id_token],否則會傳回此項。
  • token_type:OAuth 2.0 記號類型。對於 OpenID Connect,此值是 Bearer
  • id_token:ID 記號。
  • state:如果包含在授權要求中,則這是必要的。
  • expires_in:(選用)存取記號自產生回應算起的有效期限(以秒為單位)。

這些參數會新增至授權要求所指定之 redirect_uri 值的片段元件中,且不是像「授權碼流程」中那樣作為查詢參數用。

範例

下列範例顯示「授權碼流程」和「隱含流程」形式。

這裡顯示「授權碼流程」的範例要求:

 GET /authorize?
     response_type=code
     &scope=openid profile email 		
     &client_id=client01 		
     &state=af0ifjsldkj 		
     &redirect_uri=https://server.example.com:8020/oidcclient/redirect/client01 HTTP/1.1 	

這裡顯示「隱含流程」的範例要求:

 GET /authorize?
     response_type=id_token token
     &scope=openid profile 		
     &client_id=client01 		
     &state=af0ifjsldkj 		
     &redirect_uri=https://server.example.com:8020/oidcclient/redirect/client01 		
     &nonce=n-0S6_WzA2Mj HTTP/1.1 	

這裡顯示「授權碼流程」中授權端點的範例回應:

 HTTP/1.1 302 Found
 Location: https://server.example.com:8020/oidcclient/redirect/client01
     code=SplxlOBeZQQYbYS6WxSbIA
     &state=af0ifjsldkj

這裡顯示「隱含流程」中授權端點的範例回應:

 HTTP/1.1 302 Found
 Location: https://server.example.com:8020/oidcclient/redirect/client01
     access_token=SlAV32hkKG
     &token_type=Bearer 		
     &id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso 		
     &expires_in=3600 		
     &state=af0ifjsldkj

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

檔名:twlp_oidc_auth_endpoint.html