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クライアントを識別します。ID プロバイダー (IDP) に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration API 経由で取得されます。文字列 必須
nonceリプレイ攻撃を軽減するために使用されます。この値は ID トークンで返されます。文字列 必須
prompt検証に必要なインタラクションのタイプ。Empty "の場合、認証されていなければログインする必要があります。none」の場合、IDPはログインを要求しませんが、ログインしていれば認証コードを返し、ログインしていなければエラーを返します。文字列有効な値 :
none
または
redirect_uri認証コードまたはトークンを送信するコールバックの場所。クライアント登録時に IDP に事前登録された値と一致する必要があります。文字列 必須
response_typecode (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メールアドレス文字列 
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

Silentsign-inは、IDプロバイダとの有効なセッションがすでに存在する場合に、自動認証を有効にします。ユーザーが別のブラウザタブまたはアプリケーションで認証されている場合、既存のセッションが再利用され、ユーザーは認証情報の入力を促されることなくログインします。

この機能は、logged-inの状態を維持するためにブラウザのクッキーを維持することに依存しています。標準的なログインフローとSSOフローの両方に同じ認証エンドポイントを使用します。アクティブなセッションが検出されると、リクエストは再認証をトリガーすることなく、指定されたSSOリダイレクトURLにリダイレクトされます。

SSOは、cookie-basedセッションの永続性により、EUの一般データ保護規則(GDPR)遵守要件の対象外であるPOSでのみ有効にすることができます。SSOフローを有効にするには、IDプロバイダーの設定で当社のリダイレクトURLを設定する必要があります。エクスペディアは、統合時にリダイレクトURLを提供します。

ネットワーク許可リスト

このリストでは、テンプレート サイトとエクスペディア環境間のセキュアな通信の要件を定義します。AWSのイグジットIPレンジと、ローカルまたはlower-environmentのテストに使用するIPアドレスを提供します。Expediaからの受信トラフィックがブロックされないようにするには、これらのIPを許可リストに追加する必要があります。

また、弊社側で許可リストに追加できるように、お客様の組織の送信IPアドレスを弊社と共有する必要があります。

注: これらのIPが許可リストに追加されていない場合(どちらか一方または両方)、アウトバウンドとインバウンドの両方のSSOコールで接続に問題が発生します。

エクスペディアのエンドポイント

認証コールを有効にするには、IDプロバイダのredirect_uri にこれらの値を設定する必要があります:

  • {WLTP domain}/sso/auth:SSOリダイレクトエンドポイントは、ログインフローの認証コールをポストします。
  • {WLTP domain}/validateCurrentSession:SSOリダイレクトエンドポイントは、サイレントsign-inフローの認証コールをポストします。

注: エクスペディアでは、セッションの最大タイムアウト時間を標準で60分に設定しています。60分後にトークンをリフレッシュする必要があります。

このページは役に立ちましたか ?
このコンテンツに改善が必要な点があれば、
サービス向上にご協力いただきありがとうございます。