This is an auto-generated translation

OAuth 2.0 SSO 簡介

OAuth 2.0 是一種授權架構,可讓應用程式在 HTTP 服務上取得使用者帳戶的有限存取權。其運作方式是將使用者驗證委派給具有使用者帳戶的服務,並授權第三方應用程式存取使用者帳戶。OAuth 2.0 為 Web 和傳統型應用程式以及行動裝置提供授權流程。

深入了解 OAuth 2.0

基本 SSO

無論您選擇什麼功能,基本 SSO 都需要一些特定資料,特別是公開金鑰。新增會員計畫或信用卡實作將需要額外的資訊。

設定訊息

為了正確設定您範本網站的 OAuth 2.0 SSO 存取權,我們需要一些項目,包括:

  • API (授權、標記、使用者個人檔案)
  • ClientId
  • 用戶端密碼
  • ResponseMode
  • isNounceEnabled
  • customerDetailsAPIKey (如果有)

授權流程

OAuth Authorization flows

授權端點

GET /authorize 端點會用於驗證和授權,當使用者登入後,它會傳回授權授予或授權碼。這是一種瀏覽器重定向,會引導您提交憑證以進行驗證。

欄位詳情資料類型範例值是否為必要?
client_id識別用戶端。必須符合您的識別提供者 (IDP) 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。字串 
nonce用於降低重新執行攻擊風險。此值會在識別碼標記中傳回。字串 
prompt驗證所需的互動類型。若為「空」,且使用者尚未通過驗證,則必須登入。若設定為「none」,IDP 將不會提示登入,但若已登入則會傳回授權碼,否則會傳回錯誤訊息。字串有效值:
none
OR EMPTY
redirect_uri應傳送授權碼或標記的回呼位置。必須符合用戶端註冊期間,在您的 IDP 中預先註冊的值。字串 
response_typecode (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_coderedirect_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使用者偏好的語言字串En, fr
channelType使用者透過哪些不同平台與應用程式進行互動字串網頁、行動裝置、平板電腦
firstName客戶的名字字串 
middleName客戶的中間名字串 
lastName客戶的姓氏字串 
email客戶的電子郵件地址字串 
programAccountLoyalty-related 資訊programAccount有關物件的詳細資訊,請參閱Add loyalty ->programAccount 下的相關段落

CURL 使用者資訊範例

curl --location 'https://example.com/userinfo' \
--header 'client_id: {clientId}' \
--header 'Authorization: Bearer {acess_token from token endpoint}'

Userinfo 回應範例

{
  "membershipId": "12345678",
  "languageID": "en",
  "middleName": "MiddleName",
  "lastName": "LastName",
  "firstName": "FirstName",
  "email": "test@expediagroup.com",
  "programAccount": {
    "programId": "Gold",
    "loyaltyAccountBalance": {
      "value": "10000",
      "currency": "Points"
    }
  }
}

新增會員計畫

作為您網站範本的一部分,您可以加入讓客戶在購買旅遊產品時累積忠誠度點數的功能。若您選擇此功能,您的模板亦可讓客戶使用其累積的忠誠度點數 來購買旅遊產品。

適用與標準實作相同的設定需求,許多值也相同。這裡只包含不同的值。

除了標準的user information 之外,忠誠度計畫的設定還將包含以下值。

programAccount

欄位說明資料型別是否為必要?
programId旅客所屬會員計畫的識別碼,或與會員計畫相關聯的等級名稱字串
loyaltyAccountNumber旅客的會員帳號;只有在會員計畫作業需要次要識別碼 (唯一 membershipId 以外的識別碼) 時才應填入字串
lastFourDigitsOfCreditCard旅客預訂時所用信用卡的末 4 碼整數
accountName計畫名稱 (如果與等級名稱不同)字串
loyaltyConversionRatio付款轉換為賺取點數的比率 (例如 $1 = 1 點)雙精度
loyaltyAccountBalance旅客所賺取會員點數的目前餘額金額
(有關物件的詳細資訊,請參閱下方的「金額」部分)

金額

欄位說明資料型別是否為必要?
value會員點數餘額;嵌入至 loyaltyAccountBalance 下方長期
currency會員計畫所使用的獎勵幣別,例如貨幣類型、點數、英里;嵌入至 loyaltyAccountBalance 下方字串

靜默 sign-in

「靜默」sign-in 可在與身分識別提供者之間已存在有效連線時,啟用自動驗證。如果使用者已在另一個瀏覽器分頁或應用程式中完成驗證,系統將重新使用現有的會話,使用者將自動登入,無需再次輸入憑證。

此功能仰賴於維持瀏覽器 Cookie,以保留 logged-in 的狀態。它對標準登入流程和 SSO 流程均使用相同的授權端點。當偵測到有效的工作階段時,系統會將請求重定向至指定的 SSO 重定向網址,且不會觸發重新驗證。

由於 cookie-based 的會話持久性機制,僅能針對不受歐盟《一般資料保護條例》(GDPR)合規要求約束的銷售據點啟用單一登入 (SSO)。您需要在身分識別供應商的設定中配置我們的重定向網址,以啟用單一登入流程。Expedia 將在整合過程中提供重定向網址。

網路允許清單

此清單定義了您的範本網站與 Expedia 環境之間進行安全通訊所需的要求。我們將提供 AWS 出站 IP 範圍,以及用於本地或 lower-environment 測試的 IP 位址。您必須將這些 IP 地址加入允許清單,以確保來自 Expedia 的傳入流量不會被封鎖。

您還需要向我們提供貴組織的發送端 IP 位址,以便我們將其加入我們這邊的允許清單中。

注意: 若未將這些 IP 位址加入允許清單 (無論是任一端或雙方),出站與入站的 SSO 呼叫都將出現連線問題。

Expedia 端點

您需要在身分識別提供者上將「redirect_uri」設定為以下值,以啟用授權呼叫:

  • {WLTP domain}/sso/auth:登入流程中,授權呼叫完成後的 SSO 重定向終點
  • {WLTP domain}/validateCurrentSession:在「無互動」sign-in 流程中,授權呼叫完成後傳送至 SSO 重定向終點

注意: Expedia 已將標準的最大會話超時設定為 60 分鐘。60 分鐘後,您需要重新產生存取憑證。

這個頁面有幫助嗎?
我們能如何改善內容?
感謝您協助我們進行改善!