Developer Hub
これは自動生成された翻訳です。

OpenID Connect SSO の概要

OpenID Connect (OIDC) は OAuth 2.0 ベースの認証プロトコルで、大手テクノロジー企業で採用されています。

>> OIDCについて詳しくはこちら

ベーシック SSO

選択した機能に関係なく、ベーシック SSO の設定要件は同じです。ロイヤルティまたはクレジット カードの実装を追加すると、追加情報が必要になります。

設定要件

テンプレートサイトへの OIDC SSO アクセスを適切に設定するには以下が必要です。

  • API(authorize、token、userProfile, JWKS)
  • ClientId
  • クライアントシークレット
  • ResponseMode
  • isNounceEnabled
  • customerDetailsAPIKey (利用可能な場合)

認証フロー

OIDC Authorization flows

エンドポイントの認証

GET /authorize エンドポイントは認証と承認に使用されます。ユーザーがログインすると、認証グラントまたは認証コードが返されます。これは、認証のために認証情報を入力するよう誘導するブラウザのリダイレクトです。

リクエストパラメーター

パラメーター説明データタイプサンプル値必須/必須ではない
client_idクライアントを識別します。ID プロバイダー (IDP) に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration API 経由で取得されます。文字列 必須
nonceリプレイ攻撃を軽減するために使用されます。この値は ID トークンで返されます。文字列 必須
prompt検証に必要なインタラクションのタイプ。「空」の場合、まだ認証されていないユーザーはログインする必要があります。「none」の場合、IDPはログインを要求しませんが、ログイン済みの場合は認証コードを返し、そうでない場合はエラーを返します。文字列有効な値 :
なし または 空
redirect_uri認証コードまたはトークンを送信するコールバックの場所。クライアント登録時に IDP に事前登録された値と一致する必要があります。文字列 必須
response_typecode (IDP) の値。文字列 必須
response_mode承認レスポンスを返す方法。文字列有効な値 :
query
scopeプロフィールの詳細を取得するために使用されるアクセストークン。認証リクエストに必要です。文字列OpenID、profile、email必須
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=openid 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アクセストークンに含まれるスコープ文字列
id_tokenOpenID スコープが許可されている場合に返される識別子文字列

ID_token

ID_token は JSON Web トークン (JWT) で、クレームと呼ばれる認証情報の断片を含んでいます。以下の表のように、エクスペディアのテンプレートソリューションではクレームとして headerpayloadsignature を使用しています。

ヘッダークレーム

フィールド説明データタイプ必須/必須ではない
alg使用されるデジタル署名アルゴリズムを特定 (常に RS256)文字列
kidキー ID : ID トークンの検証に使用される公開鍵を特定 (対応する公開鍵は、JSON Web Key Set (JWKS) 経由で見つけることができます)文字列必須

ペイロードクレーム

フィールド説明データタイプ必須/必須ではない
amr認証方法の識別子となる文字列の JSON 配列配列
audこの ID トークンの対象者を特定 (アプリケーションの OAuth 2.0 クライアント ID のいずれか)文字列必須
auth_timeエンドユーザーが認証された時刻 (Unix時間 (秒) で表される)整数型
expID トークンの有効期限 (Unix時間 (秒) で表される)整数型必須
iatID トークンが発行された時刻 (Unix時間 (秒) で表される)整数型
idpID プロバイダーのインジケーター文字列必須
issこの ID トークンを発行した承認サーバーの URL文字列
jtiデバッグと失効を目的とした、この ID トークンの一意の識別子文字列必須
sub承認呼び出しの対象 (ユーザー) の一意の識別子文字列
verID トークンのセマンティックバージョン整数型必須

署名クレーム

署名の検証:その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
}

Userinfoエンドポイント

GET /userinfoエンドポイントは、指定されたアクセストークンに基づいて、認証済みユーザーに関するクレームを返すバックエンドAPI呼び出しです。この関数はユーザーのプロファイルデータを返します。このデータは、サイトのアカウントヘッダーに顧客名を表示するために使用され、それによってプログラムアカウントを通じて ロイヤルティ のティア情報を読み込むことができます。

注: レスポンスに必須パラメータが指定されていない場合、サイト上のユーザー体験に支障をきたすことになります。例えば、テンプレートサイトには顧客名が表示されず、エクスペディア側で ロイヤルティ への登録に接続するために必要なプログラムアカウント情報が欠落してしまいます。

リクエストヘッダー

フィールド説明データタイプサンプル値必須/必須ではない
ClientIdクライアントを識別します。ID プロバイダー (IDP) に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration API 経由で取得されます。文字列 必須
Authorizationユーザーの認証を行うために、認証情報やトークンを送信するために使用されるHTTPヘッダー文字列持参人 [access_token]必須

レスポンス

フィールド説明データタイプサンプル値必須/必須ではない
membershipIdお客様のアカウントを一意に識別する識別子文字列 必須
optIn顧客がマーケティングメールの配信を承諾したかどうかのブール値フラグBoolean (ブール型)真/偽
languageIdユーザーの希望する言語文字列En, fr
channelTypeユーザーがアプリケーションとやり取りを行うさまざまなプラットフォーム文字列WEB、モバイル、タブレット
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}'

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 の下にネスト)文字列必須

支払いカードの制限

旅行者がご予約の際、貴団体のクレジットカードを使用しなければならないように、サイトを設定することができます。すべてのテンプレートソリューションですべての主要なクレジットカードまたはデビットカード、および (米国では) PayPal を受け付けることができるため、これは必須ではありません。

クレジットカードの安全性と保管

組織のカスタムクレジット カードを使用して購入することを義務付けた場合でも、心配は無用です。クレジットカードは次のように扱われます。

  • 顧客のエクスペディアプロフィールにリンクされた、トークン化された形式でカード情報が保存されます。暗号化されていない状態で保存されることは決してありません。
  • 人間は暗号化されていないカードデータにアクセスできず、安全な IAM ログイン情報を使用しないと復号化できなくなっています。
  • カードがチェックアウトページにプリロードされると、カード番号ではなくカードの説明のみが表示されます。
  • 保存されたカードで予約を完了する場合、顧客はカードのセキュリティコードを入力する必要があります。

設定要件

標準実装の設定要件に加え、クレジットカードが追加されると以下が必要になります。

  • AuthnRequest パラメーターに使用するエンドポイント
  • 署名検証用の公開鍵

エクスペディアでは自社の秘密鍵を使用して AuthnRequest ペイロードに署名し、貴社側で署名検証を実行してもらうためにエクスペディアの公開鍵を使用します。

ペイロードの詳細

顧客がサイトにログインすると、クレジットカード SSO では、標準実装で説明されている属性とともに、セキュアなエクスペディア SSO エンドポイントに 2 つの取引パラメーターを送信します。

  • ユーザー情報 API : 署名され暗号化されたアサーションを持つ、エンコードされ署名されたレスポンスペイロード。
  • RelayState : ランディングページ URL へのディープリンク。

>> ユーザー情報APIの詳細はこちら

Information

注意

ロイヤルティポイントを獲得するようにテンプレートサイトが設定されている場合は、ProgramAccount 情報も必要です。

ペイロードには次のクレジットカードの詳細も含まれます。

フィールド説明必須/必須ではない
cardNumber請求対象のクレジットカードの番号必須
cardType使用されるカードの種類 (例 : Visa、MasterCard、American Express)必須
expirationDate使用されるクレジットカードの有効期限必須
BillingAddress使用されたカードと関連付けられているクレジットカード登録住所必須
addressCategoryCode自宅や会社などの請求先の住所の種類 (BillingAddress の下にネスト)必須
firstAddressLineクレジットカード登録住所の 1 行目 (BillingAddress の下にネスト)必須
secondAddressLineクレジットカード登録住所の 2 行目 (BillingAddress の下にネスト)
thirdAddressLineクレジットカード登録住所の 3 行目 (BillingAddress の下にネスト)
cityNameクレジットカード登録住所の市町村 (BillingAddress の下にネスト)必須
provinceNameクレジットカード登録住所の都道府県 (BillingAddress の下にネスト)必須
postalCodeクレジットカード登録住所の郵便番号 (BillingAddress の下にネスト)必須
countryCodeクレジットカード登録住所の国コード (BillingAddress の下にネスト)必須

サイレントsign-in

「sign-in」をサイレントモードに設定すると、IDプロバイダーとの間で有効なセッションがすでに存在する場合、自動認証が行われます。ユーザーが別のブラウザタブやアプリケーションで認証済みの場合、既存のセッションが再利用され、認証情報の入力を求められることなくログインされます。

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

cookie-basedのセッション保持機能のため、SSOを有効にできるのは、EUの一般データ保護規則(GDPR)の遵守要件の対象とならない販売拠点に限られます。SSOフローを有効にするには、IDプロバイダーの設定で当社のリダイレクトURLを設定していただく必要があります。エクスペディアは、連携の際にリダイレクトURLを提供いたします。

ネットワークの許可リスト

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

また、弊社側で許可リストに追加できるよう、貴組織の送信元IPアドレスをお知らせいただく必要があります。

注: これらのIPアドレスが(どちらか一方または双方の)許可リストに追加されていない場合、送信および受信の両方のSSO呼び出しにおいて接続上の問題が発生します。

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

認証呼び出しを有効にするには、IDプロバイダーの「redirect_uri」を以下の値で設定する必要があります:

  • {WLTP domain}/sso/auth: ログインフローにおける認証呼び出し後のSSOリダイレクトエンドポイント
  • {WLTP domain}/validateCurrentSession: サイレントsign-inフローにおける認証呼び出し後のSSOリダイレクトエンドポイント

注: エクスペディアでは、セッションのタイムアウトを標準で60分に設定しています。60分が経過すると、トークンを更新する必要があります。

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