呼叫 OpenID Connect 的授權端點
在 OpenID Connect 中,授權端點會處理使用者的鑑別和授權。
開始之前
關於這項作業
即使鑑別要求所包含的參數同時用 OAuth 2.0 和 OpenID Connect 1.0 兩種規格來定義,授權端點也可接受它。
在「授權碼流程」中,授權端點用於鑑別和授權,且會傳回授權許可給用戶端。接著,用戶端可將這項授權許可放在要求中傳遞給記號端點,以交換 ID 記號、存取記號和更新記號。在「隱含流程」中,授權端點仍會執行鑑別和授權,但也會將 ID 記號和存取記號直接放在其回應中傳回給用戶端;不與記號端點執行互動。
啟用 OpenID Connect 的 Liberty 伺服器能夠存取位於下列 URL 的 OpenID Connect 授權端點:
https://server.example.com:443/oidc/endpoint/<provider_name>/authorize
如果您必須使用 Proxy 來存取「OpenID Connect 提供者 (OP)」,您針對任何 OP 相關 URL 內容所輸入的值,必須包含 Proxy 主機和埠,而不是包含外部 OP 主機和埠。
在大部分情況下,您可以用 Proxy 主機和埠,取代 OP 主機和埠。RP 和用戶端(瀏覽器或應用程式)必須都能看見您所輸入的 URL。對於如何判斷所要使用的正確 URL,如需進一步指引,請聯絡您的 Proxy 管理者。
在本例中,用戶端預期的 SSL 埠設為 443。
程序
結果
一旦「OpenID Connect 提供者」收到用戶端的要求,會嘗試鑑別和授權使用者。
在「授權碼流程」中,如果鑑別和授權成功,「OpenID Connect 提供者」會簽發授權碼,並當成參數包含在要傳給用戶端的「OAuth 2.0 授權回應」中。如果起始要求中含有 state,授權回應也會包含起始要求中所包含的確切 state 值。如果使用 application/x-www-form-urlencoded 格式,會將 code 和 state 參數當成查詢參數,新增至授權要求所指定的 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