OAuth 2.0 SSO の概要
OAuth 2.0 は、アプリケーションが HTTP サービス上のユーザーアカウントへの限定的なアクセス権を取得できるようにする承認フレームワークです。ユーザーアカウントをホストするサービスにユーザー認証を委譲し、サードパーティのアプリケーションにユーザーアカウントへのアクセスを許可することで機能します。OAuth 2.0 は、Web およびデスクトップアプリケーション、モバイルデバイスのための承認フローを提供します。
ベーシック SSO
選択した機能に関係なく、ベーシック SSO ではいくつかの特定のデータ、特に公開鍵を必要とします。ロイヤルティまたはクレジットカードの実装を追加すると、追加情報が必要になります。
設定情報
テンプレートサイトへの OAuth 2.0 SSO アクセスを適切に設定するには以下が必要です。
- API (認証、トークン、ユーザープロフィール)
- ClientId
- クライアントシークレット
- ResponseMode
- isNounceEnabled
- customerDetailsAPIKey (利用可能な場合)
エクスペディアの標準的な OAuth 2.0 SSO 実装はエクスペディアの公開鍵を使用して暗号化され、承認後エンドポイントを作成し、ノンスを有効にし、スコープパラメーターを設定します。ユーザー情報も含めます。
承認
GET /authorize
エンドポイントは認証と承認に使用されます。クライアントに承認グラントを返します。
フィールド | 説明 | データタイプ | サンプル値 | 必須/必須ではない |
---|---|---|---|---|
client_id | クライアントを識別します。ID プロバイダー (IDP) に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration API 経由で取得されます。 | 文字列 | 必須 | |
nonce | リプレイ攻撃を軽減するために使用されます。この値は ID トークンで返されます。 | 文字列 | 必須 | |
prompt | 検証に必要なインタラクションのタイプ。 | 文字列 | 有効な値 : none consent | 必須ではない |
redirect_uri | 認証コードまたはトークンを送信するコールバックの場所。クライアント登録時に IDP に事前登録された値と一致する必要があります。 | 文字列 | 必須 | |
response_type | code (IDP) の値。 | 文字列 | 必須 | |
response_mode | 承認レスポンスを返す方法。 | 文字列 | 有効な値 : query | 必須ではない |
scope | プロフィールの詳細を取得するために使用されるアクセストークン。認証リクエストに必要です。 | 文字列 | OpenID、profile、email | 必須 |
state | インタラクションの状態。この値はトークンで返され、ユーザーがクリックスルーし、認証して本来興味のあるページに戻ることを可能にします。値には英数字、カンマ、ピリオド、アンダースコア、ハイフンを含めることができます。 | 文字列 | 必須 |
レスポンスパラメーター
パラメーター | 説明 | データタイプ | 必須/必須ではない |
---|---|---|---|
code | クライアントを識別する認証コード。IDP に事前に登録されている値と一致する必要があります。手動クライアント登録時、または Dynamic Client Registration API 経由で取得されます。 | 文字列 | 必須 |
state | インタラクションの状態。この値はトークンで返され、ユーザーがクリックスルーし、認証して本来興味のあるページに戻ることを可能にします。値には英数字、カンマ、ピリオド、アンダースコア、ハイフンを含めることができます。 | 文字列 | 必須 |
トークン
POST /token
エンドポイントは、承認グラントを提示することで、ユーザーの身元を検証するために使用されます。
リクエストパラメーター
パラメーター | 説明 | データタイプ | サンプル値 | 必須/必須ではない |
---|---|---|---|---|
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_token | OpenID スコープが許可されている場合に返される識別子 | 文字列 |
ID トークン
ID_token は JSON Web トークン (JWT) で、クレームと呼ばれる認証情報の断片を含んでいます。エクスペディアのテンプレートソリューションではクレームとして header
、payload
、signature
を使用しています。
ヘッダークレーム
フィールド | 説明 | データタイプ | 必須/必須ではない |
---|---|---|---|
alg | 使用されるデジタル署名アルゴリズムを特定 (常に RS256) | 文字列 | 必須ではない |
kid | キー ID : ID トークンの検証に使用される公開鍵を特定 (対応する公開鍵は、JSON Web Key Set (JWKS) 経由で見つけることができます) | 文字列 | 必須 |
ペイロードクレーム
フィールド | 説明 | データタイプ | 必須/必須ではない |
---|---|---|---|
amr | 認証方法の識別子となる文字列の JSON 配列 | 配列 | 必須ではない |
aud | この ID トークンの対象者を特定 (アプリケーションの OAuth 2.0 クライアント ID のいずれか) | 文字列 | 必須 |
auth_time | エンドユーザーが認証された時刻 (Unix時間 (秒) で表される) | 整数型 | 必須ではない |
exp | ID トークンの有効期限 (Unix時間 (秒) で表される) | 整数型 | 必須 |
iat | ID トークンが発行された時刻 (Unix時間 (秒) で表される) | 整数型 | 必須ではない |
idp | ID プロバイダーのインジケーター | 文字列 | 必須 |
iss | この ID トークンを発行した承認サーバーの URL | 文字列 | 必須ではない |
jti | デバッグと失効を目的とした、この ID トークンの一意の識別子 | 文字列 | 必須 |
sub | 承認呼び出しの対象 (ユーザー) の一意の識別子 | 文字列 | 必須ではない |
ver | ID トークンのセマンティックバージョン | 整数型 | 必須 |
署名クレーム
署名の検証:署名は client_id
とアルゴリズムに適切な鍵に対して検証されます。
ロイヤルティの追加
テンプレートサイトの一部として、顧客が旅行の購入でロイヤルティポイントを獲得できる機能を含めることができます。テンプレートでは、必要に応じて顧客が貯めたロイヤルティポイントを利用して旅行を購入できるようにすることもできます。
多くの値と同様に、標準実装と同じ設定要件が適用されます。異なるものだけをここに掲載します。
標準的なユーザー情報 に加えて、ロイヤルティプログラム設定には以下の値が含まれます。
programAccount
フィールド | 説明 | 必須/必須ではない |
---|---|---|
programId | 顧客が参加しているロイヤルティプログラムの識別子、またはロイヤルティプログラムに関連付けられているステータス名 | 必須 |
loyaltyAccountNumber | 顧客のロイヤルティアカウント番号 (ロイヤルティオペレーションにセカンダリ識別子 (一意の membershipId 以外) が必要な場合にのみ入力する必要があります) | 必須ではない |
lastFourDigitsOfCreditCard | 顧客が予約に使用したクレジットカードの下 4 桁 | 必須ではない |
accountName | プログラム名 (ステータス名と異なる場合) | 必須ではない |
loyaltyConversionRatio | 支払いにおける獲得ポイント率 (例 : 100 円 = 1 ポイント) | 必須ではない |
loyaltyAccountBalance | 顧客が獲得したロイヤルティポイントの現在の残高 | 必須 |
value | ロイヤルティ残高 (loyaltyAccountBalance の下にネスト) | 必須 |
currency | ロイヤルティプログラムで使用される獲得通貨 (例 : さまざまな通貨、ポイント、マイル) (loyaltyAccountBalance の下にネスト) | 必須 |