OAuth 2.0 SSO 簡介
OAuth 2.0 是一種授權架構,可讓應用程式在 HTTP 服務上取得使用者帳戶的有限存取權。其運作方式是將使用者驗證委派給具有使用者帳戶的服務,並授權第三方應用程式存取使用者帳戶。OAuth 2.0 為 Web 和傳統型應用程式以及行動裝置提供授權流程。
基本 SSO
無論您選擇什麼功能,基本 SSO 都需要一些特定資料,特別是公開金鑰。新增會員計畫或信用卡實作將需要額外的資訊。
設定訊息
為了正確設定您範本網站的 OAuth 2.0 SSO 存取權,我們需要一些項目,包括:
- API (授權、標記、使用者個人檔案)
- ClientId
- 用戶端密碼
- ResponseMode
- isNounceEnabled
- customerDetailsAPIKey (如果有)
Expedia 的標準 OAuth 2.0 SSO 實作將使用我們的公開金鑰進行加密、建立授權後端點、啟用 Nonce,並設定範圍參數,也會包含使用者資訊。
授權
GET /authorize
端點會用於驗證和授權,並將授權授與傳回用戶端。
欄位 | 詳情 | 資料類型 | 範例值 | 是否為必要? |
---|---|---|---|---|
client_id | 識別用戶端。必須符合您的識別提供者 (IDP) 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。 | 字串 | 是 | |
nonce | 用於降低重新執行攻擊風險。此值會在識別碼標記中傳回。 | 字串 | 是 | |
prompt | 驗證所需的互動類型。 | 字串 | 有效值: none consent | 否 |
redirect_uri | 應傳送授權碼或標記的回呼位置。必須符合用戶端註冊期間,在您的 IDP 中預先註冊的值。 | 字串 | 是 | |
response_type | code (IDP) 值。 | 字串 | 是 | |
response_mode | 授權回應的傳回方式。 | 字串 | 有效值: query | 否 |
scope | 存取標記,用於擷取個人檔案詳細資料。驗證要求的必要項目。 | 字串 | OpenID、profile 和 email | 是 |
state | 互動狀態。此值會在標記中傳回,並可讓使用者點選連結、進行驗證,並返回最初感興趣的頁面。該值可以包含英數字元、逗號、句號、底線和連字號字元。 | 字串 | 是 |
回應參數
參數 | 詳情 | 資料類型 | 是否為必要? |
---|---|---|---|
code | 識別用戶端的授權碼。這必須符合您的 IDP 中預先註冊的值。在手動用戶端註冊期間或透過動態用戶端註冊 API 取得。 | 字串 | 是 |
state | 互動狀態。此值會在標記中傳回,並可讓使用者點選連結、進行驗證,並返回最初感興趣的頁面。該值可以包含英數字元、逗號、句號、底線和連字號字元。 | 字串 | 是 |
標記
POST /token
端點會用於透過提供授權授與來驗證使用者的身分識別。
要求參數
參數 | 詳情 | 資料類型 | 範例值 | 是否為必要? |
---|---|---|---|---|
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 | 存取標記中包含的範圍 | 字串 |
id_token | 授與 OpenID 範圍時傳回的識別碼 | 字串 |
識別碼標記
ID_token 是 JSON Web 標記 (JWT),其中包含稱為宣告的驗證資訊。Expedia 範本解決方案使用宣告 header
、payload
和 signature
。
標頭宣告
欄位 | 詳情 | 資料類型 | 是否為必要? |
---|---|---|---|
alg | 識別所使用的數位簽章演算法 (一律為 RS256) | 字串 | 否 |
kid | 金鑰識別碼:識別用於驗證識別碼標記的公開金鑰;可透過 JSON Web 金鑰組 (JWKS) 找到對應的公開金鑰 | 字串 | 是 |
有效負載宣告
欄位 | 詳情 | 資料類型 | 是否為必要? |
---|---|---|---|
amr | 做為驗證方法識別碼的 JSON 字串陣列 | 陣列 | 否 |
aud | 識別此識別碼標記的預定對象 (您應用程式的 OAuth 2.0 用戶端識別碼之一) | 字串 | 是 |
auth_time | 終端使用者的驗證時間,以 Unix 時間 (秒) 表示 | 整數 | 否 |
exp | 識別碼標記的到期時間,以 Unix 時間 (秒) 表示 | 整數 | 是 |
iat | 識別碼標記的發行時間,以 Unix 時間 (秒) 表示 | 整數 | 否 |
idp | 識別提供者的指標 | 字串 | 是 |
iss | 發行此識別碼標記的授權伺服器網址 | 字串 | 否 |
jti | 此識別碼標記的唯一識別碼,用於偵錯和撤銷目的 | 字串 | 是 |
sub | 授權呼叫之主體 (使用者) 的唯一識別碼 | 字串 | 否 |
ver | 識別碼標記的語意版本 | 整數 | 是 |
簽章宣告
簽章驗證:將根據該 client_id
的適當金鑰和演算法來驗證簽章。
新增會員計畫
您可以在範本網站中,加入讓旅客透過購買旅遊相關產品賺取會員點數的功能。如果想要,您的範本也可讓旅客使用累積的會員點數來購買旅遊相關產品。
適用與標準實作相同的設定需求,許多值也相同。這裡只包含不同的值。
除了標準使用者資訊之外,會員計畫設定還包含下列值。
programAccount
欄位 | 詳情 | 是否為必要? |
---|---|---|
programId | 旅客所屬會員計畫的識別碼,或與會員計畫相關聯的等級名稱 | 是 |
loyaltyAccountNumber | 旅客的會員帳號;只有在會員計畫作業需要次要識別碼 (唯一 membershipId 以外的識別碼) 時才應填入 | 否 |
lastFourDigitsOfCreditCard | 旅客預訂時所用信用卡的末 4 碼 | 否 |
accountName | 計畫名稱 (如果與等級名稱不同) | 否 |
loyaltyConversionRatio | 付款轉換為賺取點數的比率 (例如 $1 = 1 點) | 否 |
loyaltyAccountBalance | 旅客所賺取會員點數的目前餘額 | 是 |
value | 會員點數餘額;嵌入至 loyaltyAccountBalance 下方 | 是 |
currency | 會員計畫所使用的獎勵幣別,例如貨幣類型、點數、英里;嵌入至 loyaltyAccountBalance 下方 | 是 |