呼叫 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
註: 在本例中,OP 的 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

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



「時間戳記」圖示 前次更新: 2016 年 11 月 30 日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_oidc_auth_endpoint
檔名:twlp_oidc_auth_endpoint.html