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 エンドポイントは認証と承認に使用されます。ポストユーザーが以下のような場合、クライアントに認可グラントまたはコードを返します。logged-in. ブラウザのリダイレクトです。
| フィールド | 説明 | データタイプ | サンプル値 | 必須/必須ではない | 
|---|---|---|---|---|
| client_id | クライアントを識別します。ID プロバイダー (IDP) に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration API 経由で取得されます。 | 文字列 | 必須 | |
| nonce | リプレイ攻撃を軽減するために使用されます。この値は ID トークンで返されます。 | 文字列 | 必須 | |
| prompt | 検証に必要なインタラクションのタイプ。Empty "の場合、認証されていなければログインする必要があります。none」の場合、IDPはログインを要求しませんが、ログインしていれば認証コードを返し、ログインしていなければエラーを返します。 | 文字列 | 有効な値 : none または 空 | 必須ではない | 
| redirect_uri | 認証コードまたはトークンを送信するコールバックの場所。クライアント登録時に IDP に事前登録された値と一致する必要があります。 | 文字列 | 必須 | |
| response_type | code(IDP) の値。 | 文字列 | 必須 | |
| response_mode | 承認レスポンスを返す方法。 | 文字列 | 有効な値 : query | 必須ではない | 
| scope | プロフィールの詳細を取得するために使用されるアクセストークン。認証リクエストに必要です。 | 文字列 | プロフィールとEメール | 必須 | 
| state | インタラクションの状態。この値はトークンで返され、ユーザーがクリックスルーし、認証して本来興味のあるページに戻ることを可能にします。値には英数字、カンマ、ピリオド、アンダースコア、ハイフンを含めることができます。 | 文字列 | 必須 | |
| ui_locales | ユーザーインターフェースに使用される言語とスクリプト。 | 文字列 | en_CA, fr_CA | 必須ではない | 
| audience | 意図した受取人 | 文字列 | パートナーによる定義 | 必須ではない | 
レスポンスパラメーター
| パラメーター | 説明 | データタイプ | 必須/必須ではない | 
|---|---|---|---|
| code | クライアントを識別する認証コード。IDP に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration 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エンドポイントは、認可グラントまたはコードを提示してアクセストークンとIDトークンを取得するために使用されるバックエンドAPI呼び出しです。
リクエストパラメーター
| パラメーター | 説明 | データタイプ | 必須/必須ではない | 
|---|---|---|---|
| grant_type | トークンの作成を承認するために IDP が使用するメカニズム。値 : authorization_code | 文字列 | 必須 | 
| redirect_uri | 承認が送信されたコールバックの場所を指定します。この値は、元の authorization_codeの生成に使われたredirect_uriと一致する必要があります。 | 文字列 | 必須 | 
| code | /authorize呼び出しレスポンスで受信したクライアント識別コード。 | 文字列 | 必須 | 
リクエストヘッダー
| パラメーター | 説明 | データタイプ | サンプル値 | 必須/必須ではない | 
|---|---|---|---|---|
| accept | 「application/json」とする必要があります。 | 文字列 | application/json | 必須 | 
| authorization | クライアント ID とシークレットを Base64 でエンコードします。HTTP 承認ヘッダーにエンコードされた情報を使用します。 | 文字列 | Basic<Base64 でエンコードされたクライアント ID とシークレット> | 必須 | 
| 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
}ユーザー情報エンドポイント
GET /userinfoエンドポイントは、提供されたアクセストークンに基づいて認証されたユーザーに関するクレームを返すバックエンドAPI呼び出しです。
リクエストヘッダ
| フィールド | 説明 | データタイプ | サンプル値 | 必須/必須ではない | 
|---|---|---|---|---|
| ClientId | クライアントを識別します。ID プロバイダー (IDP) に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration API 経由で取得されます。 | 文字列 | 必須 | |
| Authorization | ユーザーを認証するためのクレデンシャルまたはトークンを送信するために使用されるHTTPヘッダー。 | 文字列 | ベアラーaccess_token] | 必須 | 
レスポンス
| フィールド | 説明 | データタイプ | サンプル値 | 必須/必須ではない | 
|---|---|---|---|---|
| membershipId | お客様の口座を一意に識別する識別子 | 文字列 | 必須 | |
| optIn | 顧客がマーケティングメールの受信を許可しているかどうかのブール値フラグ | Boolean (ブール型) | 真/偽 | 必須ではない | 
| languageId | ユーザーが希望する言語 | 文字列 | Ja, fr | 必須ではない | 
| channelType | ユーザーがアプリケーションとやりとりするさまざまなプラットフォーム | 文字列 | ウェブ、モバイル、タブレット | 必須ではない | 
| firstName | お客様のお名前 | 文字列 | 必須 | |
| middleName | お客様のミドルネーム | 文字列 | 必須ではない | |
| lastName | お客様の姓 | 文字列 | 必須ではない | |
| email | お客様のEメールアドレス | 文字列 | 必須ではない | |
| programAccount | Loyalty-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の下にネスト) | 文字列 | 必須 |