
![[8.5.5.4 或更新版本]](../ng_v8554.gif)
呼叫 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
註: 在本例中,OP 的 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:443/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:443/oidcclient/redirect/client01
&nonce=n-0S6_WzA2Mj HTTP/1.1
這裡顯示「授權碼流程」中授權端點的範例回應:
HTTP/1.1 302 Found
Location: https://server.example.com:443/oidcclient/redirect/client01
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj
這裡顯示「隱含流程」中授權端點的範例回應:
HTTP/1.1 302 Found
Location: https://server.example.com:443/oidcclient/redirect/client01
access_token=SlAV32hkKG
&token_type=Bearer
&id_token=eyJ0 ... NiJ9.eyJ1c ... I6IjIifX0.DeWt4Qu ... ZXso
&expires_in=3600
&state=af0ifjsldkj