OAuth 2.0 SSO 簡介
OAuth 2.0 是一種授權架構,可讓應用程式在 HTTP 服務上取得使用者帳戶的有限存取權。其運作方式是將使用者驗證委派給具有使用者帳戶的服務,並授權第三方應用程式存取使用者帳戶。OAuth 2.0 為 Web 和傳統型應用程式以及行動裝置提供授權流程。
基本 SSO
無論您選擇什麼功能,基本 SSO 都需要一些特定資料,特別是公開金鑰。新增會員計畫或信用卡實作將需要額外的資訊。
設定訊息
為了正確設定您範本網站的 OAuth 2.0 SSO 存取權,我們需要一些項目,包括:
- API (授權、標記、使用者個人檔案)
- ClientId
- 用戶端密碼
- ResponseMode
- isNounceEnabled
- customerDetailsAPIKey (如果有)
授權流程

授權端點
GET /authorize 端點會用於驗證和授權,當使用者登入後,它會傳回授權授予或授權碼。這是一種瀏覽器重定向,會 引導您提交憑證以進行驗證。
| 欄位 | 詳情 | 資料類型 | 範例值 | 是否為必要? |
|---|---|---|---|---|
client_id | 識別用戶端。必須符合您的識別提供者 (IDP) 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。 | 字串 | 是 | |
nonce | 用於降低重新執行攻擊風險。此值會在識別碼標記中傳回。 | 字串 | 是 | |
prompt | 驗證所需的互動類型。若為「空」,且使用者尚未通過驗證,則必須登入。若設定為「none」,IDP 將不會提示登入,但若已登入則會傳回授權碼,否則會傳回錯誤訊息。 | 字串 | 有效值: none OR EMPTY | — |
redirect_uri | 應傳送授權碼或標記的回呼位置。必須符合用戶端註冊期間,在您的 IDP 中預先註冊的值。 | 字串 | 是 | |
response_type | code (IDP) 值。 | 字串 | 是 | |
response_mode | 授權回應的傳回方式。 | 字串 | 有效值: query | — |
scope | 存取標記,用於擷取個人檔案詳細資料。驗證要求的必要項目。 | 字串 | 個人資料與電子郵件 | 是 |
state | 互動狀態。此值會在標記中傳回,並可讓使用者點選連結、進行驗證,並返回最初感興趣的頁面。該值可以包含英數字元、逗號、句號、底線和連字號字元。 | 字串 | 是 | |
ui_locales | 使用者對使用者介面所偏好的語言及文字編碼。 | 字串 | en_CA, fr_CA | — |
audience | 預定收件人。 | 字串 | 由合作夥伴定義 | — |
回應參數
| 參數 | 詳情 | 資料類型 | 是否為必要? |
|---|---|---|---|
code | 識別用戶端的授權碼。這必須符合您的 IDP 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。 | 字串 | 是 |
state | 互動狀態。此值會在標記中傳回,並可讓使用者點選連結、進行驗證,並返回最初感興趣的頁面。該值可以包含英數字元、逗號、句號、底線和連字號字元。 | 字串 | 是 |
授權 URL 範例
https://example.com/authorize?client_id={clientID}&response_type=code&state=d6b93799-404b-4205-9bb3-c579b1180428&scope=email profile&nounce=234567687867&redirect_uri=https://{ExpediaDomain}/sso/auth回呼 URL 範例
https://{ExpediaDomain}/sso/auth?code=12345678&state=d6b93799-404b-4205-9bb3-c579b1180428代幣端點
POST /token端點是一個後端 API 呼叫,用於透過提交授權授予或授權碼來取得存取憑證和身分憑證。
要求參數
| 參數 | 詳情 | 資料類型 | 是否為必要? |
|---|---|---|---|
grant_type | 您的 IDP 用於授權建立標記的機制。值:authorization_code | 字串 | 是 |
redirect_uri | 指定傳送授權的回呼位置。此值必須符合用於產生原始 authorization_code 的 redirect_uri。 | 字串 | 是 |
code | /authorize 呼叫回應中收到的用戶端識別碼。 | 字串 | 是 |
要求標頭
| 參數 | 詳情 | 資料類型 | 範例值 | 是否為必要? |
|---|---|---|---|---|
accept | 必須是「application/json」 | 字串 | application/json | 是 |
authorization | 使用 Base64 對用戶端識別碼和密碼進行編碼。使用 HTTP 授權標頭中的編碼資訊。 | 字串 | Basic<Base64 編碼的用戶端識別碼和密碼> | 是 |
Content-Type | 必須是「application/x-www-form-urlencoded」 | 字串 | application/x-www-form-urlencoded | 是 |
回應屬性
| 欄位 | 詳情 | 資料類型 |
|---|---|---|
access_token | 存取標記 | 字串 |
token_type | 標記的對象 | 字串 |
expires_in | 存取標記的到期時間 (秒) | 整數 |
scope | 存取標記中包含的範圍 | 字串 |
範例代幣 CURL
curl --location 'https://example.com/token’ \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic {encoded ClientID:clientSecret}' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'redirect_uri=https://{ExpediaDomain}/sso/auth’ \
--data-urlencode 'code={Authorization code after login as part of callback to Expedia /sso/auth endpoint}'範例代幣回應
{
"access_token": "eyJhbGciOi.JSUzI1NiIsImtpZCI6Ilk1MkFDVXd3QV9SUzI1NiIsInBp.LmF0bSI6ImlrY20ifQ",
"token_type": "Bearer",
"expires_in": 1799
}Userinfo 端點
GET /userinfo端點是一個後端 API 呼叫,會根據提供的存取憑證,回傳關於已驗證使用者的聲明。此功能會傳回使用者個人資料,用於在網站的帳戶頁首顯示客戶姓名,並可透過該計畫帳戶載入忠誠度等級資訊。
注意: 若回應中未提供必填參數,將導致網站上的使用者體驗出現問題。例如,客戶姓名將不會顯示在範本網站上,且用於在 Expedia 端連結忠誠度註冊所需的程式帳戶資訊將會缺失。
請求標頭
| 欄位 | 詳情 | 資料類型 | 範例值 | 是否為必要? |
|---|---|---|---|---|
ClientId | 識別用戶端。必須符合您的識別提供者 (IDP) 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。 | 字串 | 是 | |
Authorization | 用於傳送憑證或代幣以驗證使用者身分的 HTTP 標頭 | 字串 | 持有人 [access_token] | 是 |
回應
| 欄位 | 詳情 | 資料類型 | 範例值 | 是否為必要? |
|---|---|---|---|---|
membershipId | 用於唯一識別客戶帳戶的識別碼 | 字串 | 是 | |
optIn | 客戶是否選擇訂閱行銷電子郵件的布林標記 | 布林 | 是/否 | — |
languageId | 使用者偏好的語言 |