This is an auto-generated translation

OpenID Connect SSO 簡介

OpenID Connect (OIDC) 是各大科技公司都已採用的一種 OAuth 2.0 型驗證通訊協定。

深入了解 OIDC

基本 SSO

無論您選擇什麼功能,基本 SSO 的設定需求都相同。新增會員計畫或信用卡實作將需要額外的資訊。

設定需求

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

  • API (授權、憑證、userProfile, JWKS)
  • ClientId
  • 用戶端密碼
  • ResponseMode
  • isNounceEnabled
  • customerDetailsAPIKey (如果有)

授權流程

OIDC Authorization flows

授權終端點

GET /authorize 端點會用於驗證和授權,當使用者完成驗證後,系統會向客戶端返回授權許可或授權碼。logged-in. 這是瀏覽器重定向。

要求參數

參數詳情資料類型範例值是否為必要?
client_id識別用戶端。必須符合您的識別提供者 (IDP) 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。字串 
nonce用於降低重新執行攻擊風險。此值會在識別碼標記中傳回。字串 
prompt驗證所需的互動類型。若為「空值」,則使用者必須登入 (若尚未驗證身份)。若為「無」,IDP 將不會提示登入,但若已登入則會返回授權碼,否則將返回錯誤訊息。字串有效值:
無或空
redirect_uri應傳送授權碼或標記的回呼位置。必須符合用戶端註冊期間,在您的 IDP 中預先註冊的值。字串 
response_typecode (IDP) 值。字串 
response_mode授權回應的傳回方式。字串有效值:
query
scope存取標記,用於擷取個人檔案詳細資料。驗證要求的必要項目。字串OpenID、profile 和 email
state互動狀態。此值會在標記中傳回,並可讓使用者點選連結、進行驗證,並返回最初感興趣的頁面。該值可以包含英數字元、逗號、句號、底線和連字號字元。字串 
ui_locales使用者偏好的使用者介面語言與文字編碼。字串en_CA, fr_CA
audience預定收件人。字串由夥伴定義

回應參數

參數詳情資料類型是否為必要?
code識別用戶端的授權碼。這必須符合您的 IDP 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。字串
state互動狀態。此值會在標記中傳回,並可讓使用者點選連結、進行驗證,並返回最初感興趣的頁面。該值可以包含英數字元、逗號、句號、底線和連字號字元。字串

授權網址範例

https://example.com/authorize?client_id={clientID}&response_type=code&state=d6b93799-404b-4205-9bb3-c579b1180428&scope=openid email profile&nounce=234567687867&redirect_uri=https://{ExpediaDomain}/sso/auth

範例回呼網址

https://{ExpediaDomain}/sso/auth?code=12345678&state=d6b93799-404b-4205-9bb3-c579b1180428

代幣端點

POST /token端點是一個後端 API 呼叫,用於透過提供授權授予或代碼來獲取存取憑證和身分憑證。

要求參數

參數詳情資料類型是否為必要?
grant_typeIDP 用於授權建立標記的機制。值: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存取標記中包含的範圍字串
id_token授與 OpenID 範圍時傳回的識別碼字串

ID_token

ID_token 是 JSON Web 標記 (JWT),其中包含稱為宣告的驗證資訊。Expedia 範本解決方案使用宣告 headerpayloadsignature,如下表所示。

標頭宣告

欄位詳情資料類型是否為必要?
alg識別所使用的數位簽章演算法 (一律為 RS256)字串
kid金鑰識別碼:識別用於驗證識別碼標記的公開金鑰;可透過 JSON Web 金鑰組 (JWKS) 找到對應的公開金鑰字串

有效負載宣告

欄位詳情資料類型是否為必要?
amr做為驗證方法識別碼的 JSON 字串陣列陣列
aud識別此識別碼標記的預定對象 (您應用程式的 OAuth 2.0 用戶端識別碼之一)字串
auth_time終端使用者的驗證時間,以 Unix 時間 (秒) 表示整數
exp識別碼標記的到期時間,以 Unix 時間 (秒) 表示整數
iat識別碼標記的發行時間,以 Unix 時間 (秒) 表示整數
idp識別提供者的指標字串
iss發行此識別碼標記的授權伺服器網址字串
jti此識別碼標記的唯一識別碼,用於偵錯和撤銷目的字串
sub授權呼叫之主體 (使用者) 的唯一識別碼字串
ver識別碼標記的語意版本整數

簽章宣告

簽名驗證:系統將使用對應於該JWKS endpoint 及演算法的適當金鑰 (透過client_id 取得) 對簽名進行驗證。

範例代幣 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",
    "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6.IllEQnJQdlllYlRwa1laODZoaGk1MkFDVX.d3QV9SUzI1NiJ9",
    "token_type": "Bearer",
    "expires_in": 1799
}

使用者資訊端點

GET /userinfo 端點是一個後端 API 呼叫,根據提供的存取憑證,返回關於已驗證使用者的聲明。

請求標頭

欄位詳情資料類型範例值是否為必要?
ClientId識別用戶端。必須符合您的識別提供者 (IDP) 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。字串 
Authorization用於傳送憑證或代幣以驗證使用者身分的 HTTP 標頭字串持有人 [access_token]

回應

欄位詳情資料類型範例值是否為必要?
membershipId唯一識別客戶帳戶的識別碼字串 
optIn客戶選擇接收行銷電子郵件時的布林標記布林值真/假
languageId用戶首選語言字串英文, 法文
channelType使用者透過不同平台與應用程式進行互動字串網頁、行動裝置、平板電腦
firstName客戶的姓名字串 
middleName客戶的中間名字串 
lastName客戶的姓氏字串 
email客戶的電子郵件地址字串 
programAccountLoyalty-related 資訊programAccount請參閱Add loyalty 中的「programAccount」章節,以獲取物件詳細資訊。
CardDetails客戶的信用卡資料CardDetails請參閱Restrict payment card 中的「Payload details」章節,以獲取物件詳細資訊。

範例用戶資訊 CURL

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

範例使用者資訊回應

{
  "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 下方字串

限制支付卡

我們可設定貴機構的網站,要求旅客必須使用貴機構的信用卡進行預訂。這是選擇性設定,因為所有範本解決方案都可以接受所有主要信用卡或金融卡,以及 PayPal (僅限美國) 。

信用卡安全與儲存

如果選擇要求使用您組織的自訂信用卡進行購買,我們希望您能感到安心。以下是我們的處理方式。

  • 卡片資訊會以記號化形式儲存,並連結至旅客的 Expedia 個人檔案。絕不會以未加密的方式儲存。
  • 任何人都無法存取未加密的卡片資料,且只能使用安全的 IAM 登入資訊進行解密。
  • 當卡片預先載入付款頁面時,只會顯示卡片詳情,不會顯示卡號。
  • 旅客必須輸入卡片的信用卡安全碼,才能使用儲存的卡片完成預訂。

設定需求

除了來自標準實作的設定需求之外,新增您的信用卡時還需要:

  • 用於 AuthnRequest 參數的端點。
  • 用於簽章驗證的公開金鑰。

我們將使用 Expedia 的私密金鑰來簽署 AuthnRequest 有效負載和公開金鑰,以在您那一端提供簽章驗證。

有效負載詳細資料

除了標準實作中所述的屬性之外,當旅客登入您的網站時,信用卡 SSO 會啟動,以將兩個交易參數傳送至安全的 Expedia SSO 端點:

  • 使用者資訊 API:使用已簽署和加密的判斷提示,進行編碼和簽署的回應有效負載。
  • RelayState:連至登陸頁面網址的深層連結。
Information

注意

如果您的範本網站同時設定了賺取會員點數,您也需要 programAccount 資訊。

有效負載也將包含下列信用卡詳細資料:

欄位詳情是否為必要?
cardNumber用於收費的卡號
cardType所使用的卡片類型 (例如 Visa、MasterCard、American Express)
expirationDate所使用卡片的到期日
BillingAddress與所使用卡片相關聯的帳單地址
addressCategoryCode帳單地址類型,例如住家或辦公室;嵌入至 BillingAddress 下方
firstAddressLine帳單地址的第一行;嵌入至 BillingAddress 下方
secondAddressLine帳單地址的第二行;嵌入至 BillingAddress 下方
thirdAddressLine帳單地址的第三行;嵌入至 BillingAddress 下方
cityName帳單地址的城市;嵌入至 BillingAddress 下方
provinceName帳單地址的州/省;嵌入至 BillingAddress 下方
postalCode帳單地址的郵遞區號;嵌入至 BillingAddress 下方
countryCode帳單地址的國碼 (地區碼);嵌入至 BillingAddress 下方
這個頁面有幫助嗎?
我們能如何改善內容?
感謝您協助我們進行改善!