OpenID Connect 要求マッピング Open Banking インテント ID
サード・パーティー・アプリケーションは、ユーザー許可を必要とするトランザクション (例えば、決済転送) を開始する場合、金融機関または銀行によって提供される API を使用して、トランザクションの詳細を登録します。 例えば、トランザクションの金額と通貨のタイプが登録されます。 このプロセスは、「インテントの宿泊」と呼ばれることもあります。 API は、インテント ID (UK Open Banking 仕様では同意 ID とも呼ばれる) で応答します。 アプリケーションは OAuth 許可コード・フローを開始して、ユーザー同意として記録されたユーザー許可を取得します。
- 要求からインテント ID を抽出します。
- 通常は銀行の API を呼び出して、インテント・コンテキスト情報を取得します。
id_tokenで権限をクレームまたはスコープの値として表す方法を選択します。
使用可能な入力オブジェクト
このカスタム・ルールは認証の後、許可の前に実行されるため、使用可能な情報には、可能なすべてのドメイン・オブジェクトが含まれているわけではありません。 以下のタイプに限定されます。
- HTTP 要求コンテキスト
- ユーザーがVerifyにログインすると、要求マッピング・ルールで着信 HTTP 要求コンテキストにアクセスできます。 すべての OAuth 要求パラメーター (
claimsやscopeなど) は、このrequestContextで使用できます。 の一般的な構造と使用法については、 属性関数のrequestContext「 HTTP リクエストコンテキスト」セクションで説明されています。簡単にアクセスできるように、requestContextでは特定の値が事前計算されています。claims要求パラメーターは、通常、以下の例のような JSON として表されます。{ "id_token": { "claim_name": { "essential": false, "value": "some_value" } }, "userinfo": { "claim_name": { "essential": false, "value": "some_value" } } }この JSON はアクセスが煩雑になる可能性があるため、
requestContextで使用されるキーの形式はclaims_claimType_claimNameになります。claimTypeは、userinfoまたはidtokenのいずれかです。 欠落している下線に注意してください。 したがって、前の例では、requestContext.getValue('claims_idtoken_claim_name')を使用してclaim_name値を取得できます。同様に、
scopeは、ストリング配列を作成するために計算され、スペースで分割されます。 - ID ソースの資格情報
ユーザーがVerifyにログインすると、ID ソース資格情報属性がログイン・セッションに追加され、要求マッピング・ルールでアクセスできるようになります。
idsuserドメイン・オブジェクトは、ストリング・キーとストリング配列値を持つマップとして使用できます。 例えば、以下のとおりです。
詳細については、 属性関数を参照してください。{ "realmName": ["cloudIdentityRealm"], "displayName": ["Jessica J. Hill"], "phone": ["+12324321234"] }- その他の関数および演算子
マッピング・ルールでは、標準の演算子と関数を使用できます。 HTTP クライアントは、アウトバウンド要求を行うためにも使用できます。 サポートされるその他の機能には、ハッシュおよびタイム・スタンプが含まれます。 属性関数の関連セクションを参照してください。
オブジェクトを返す
このカスタム・ルールは許可コンテキストを作成するために解釈する必要があるため、このルールの戻り値は、以下の必須プロパティーを含む JSON オブジェクトでなければなりません。
| プロパティー | タイプ | 必須かどうか | 説明 |
|---|---|---|---|
type |
ストリング | はい | タイプは、実行中のトランザクションのタイプを示します。 例えば、支払開始などです。 これは、Verify ではデータ・プライバシーの目的として表されます。 システムによって提供または生成される目的 ID は、typeの値です。 |
intentID |
ストリング | はい | インテント ID を指定する必要があります。 これは通常、requestContextから計算されます。 |
claims |
JSON オブジェクト。 JSON プロパティー値は、任意のタイプにすることができます。 | いいえ | 通常、ユーザー許可の場合、生成される ID トークンには、インテント ID によって識別されるトランザクションをユーザーが許可したことを示す何らかの標識が含まれます。 claimsは JSON オブジェクトまたはマップです。ここで、キーはクレーム名であり、値は任意の JSON 互換構造 (ストリング、整数、別のオブジェクト、配列、またはその他の構造など) にすることができます。 複数のクレームを指定することもできます。 |
scope |
ストリング | いいえ | 要求が許可されている場合、この値は許可されたスコープに追加されます。 |
金額や通貨などの追加属性は、カスタム属性として扱われます。 これらは、後述の対応するテンプレート・マクロを使用して、ユーザー同意ページに表示できます。
UK Open Banking の例
- サード・パーティー・プロバイダーに常駐し、支払いトランザクションを開始する決済開始サービス・プロバイダー (PISP)。
- アカウント情報サービス・プロバイダー (ASPSP) 許可サーバー。 このシナリオでは、ASPSP はVerifyです。
- 支払い開始 API をホストする ASPSP リソース・サーバー。
- インテント ID を抽出します。
- リソース・サーバーからこのトランザクションに関する情報を取得します。
- 要求からインテント ID を抽出している
- この例は、
claimsを介してインテント ID を送信する UK Open Banking 標準に従っています。 着信許可要求には、クレーム内のopenbanking_intent_idが含まれています。
クレームが抽出され、要求コンテキストで使用可能になります。 値を取得するために使用されるコードは、以下のとおりです。{ "id_token": { "openbanking_intent_id": { "value": "b508f9df-799b-4120-a13e-5d09f2931fa6", "essential": true } } }requestContext.getValue('claims_idtoken_openbanking_intent_id') - トランザクション情報の検索
- トランザクション情報は、同意またはインテント ID が生成されたアカウント・サービス提供サービス・プロバイダ (ASPSP) リソース・サーバーに保管されます。 HTTP クライアントを使用して、リソース・サーバーに要求を出します。 以下の要求は例です。
hc.getAsJSON("https://resource.myaspsp.com/internal/intents/" + context.intentID - プライバシーの目的と請求へのトランザクションのマップ
- Open Banking 決済の開始とアカウント・アクセスの同意をキャプチャーするには、関連するプライバシー目的を作成する必要があります。 例えば、支払い開始同意要求に対して
payment_initiationプライバシー目的を作成する必要があります。 その後、この目的は、戻りオブジェクトのtypeプロパティーにマップされます。さらに、UK Open Banking の場合は、openbanking_intent_idクレームを作成する必要があります。 トランザクションに関する残りの情報は、返品オブジェクトに追加することもできます。{ "type": "payment_initiation", "intentID": "b508f9df-799b-4120-a13e-5d09f2931fa6", "currency": "USD", "amount": "1200.35", "merchant": "Merchant A", "claims": { "openbanking_intent_id": "b508f9df-799b-4120-a13e-5d09f2931fa6" } } - サンプル・マッピング・ルール
statements: - if: match: "!has(requestContext.claims_idtoken_openbanking_intent_id)" return: null - context: "intentID := requestContext.getValue('claims_idtoken_openbanking_intent_id')" - context: 'intentContext := hc.getAsJSON("https://resource.myaspsp.com/internal/intents/" + context.intentID, { "Authorization": "apikey supersecretapikey" })' - return: >- { "type": context.intentContext.type, "intentID": context.intentID, "currency": context.intentContext.instructedAmount.currency, "amount": context.intentContext.instructedAmount.amount, "merchant": context.intentContext.creditorName, "claims": { "openbanking_intent_id": context.intentID } }
同意ページのカスタマイズ
トランザクション承認の同意ユーザーエクスペリエンスは、標準のOAuthおよびOpenID Connectスコープ同意とは異なるため、同意ページテンプレートにカスタムセクションを作成できます。 詳細は「ページ OpenID 向けシングルサインオンの変更」 を参照してください。
[RPT purpose_payment_initiation]
<input type="hidden" name="@PRIVACY_SCOPE_PNAME_REPEAT@"
value="@PRIVACY_SCOPE_REPEAT@" privacy-readonly="true" />
<input type="hidden" id="@PRIVACY_SCOPE_PNAME_REPEAT@_state" name="@PRIVACY_SCOPE_PSTATE_REPEAT@"
value="CONSENT_ALLOW" privacy-required="@PRIVACY_SCOPE_REQUIRED_REPEAT@" />
<div id="@PRIVACY_SCOPE_PNAME_REPEAT@_widget" class="bx--form-item" style="width:350px;"></div>
<div class="bx--grid" style="padding-left:0">
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Amount</div>
<div class="bx--col">@PRIVACY_SCOPE_CUSTOM_currency@ @PRIVACY_SCOPE_CUSTOM_amount@</div>
</div>
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Merchant</div>
<div class="bx--col">@PRIVACY_SCOPE_CUSTOM_merchant@</div>
</div>
<div class="bx--row" style="padding-bottom:6px;">
<div class="bx--col-sm-1">Reference</div>
<div class="bx--col">@PRIVACY_SCOPE_ATTRVALUE_REPEAT@</div>
</div>
</div>
[ERPT purpose_payment_initiation]以下の点に注意してください。- 特定のデータ・プライバシーの目的で使用される新しい反復可能セクション。 使用される名前は、
purpose_{purposeID}の形式に従います。purposeIDは、データ・プライバシーの目的 ID です。 この目的 ID は、システム生成またはユーザー提供にすることができます。 - 2 つの HTML フォーム・フィールドは必須であり、
@PRIVACY_SCOPE_PNAME_REPEAT@および@PRIVACY_SCOPE_PNAME_REPEAT@_stateという名前です。 最初のフィールドには、同意レコードのVerify ID が含まれます。 2 番目のフィールドには、同意の状態が含まれます。 - 拡張規則によって返されるカスタム属性は、マクロ
@PRIVACY_SCOPE_CUSTOM_{attributeName}@を使用して参照できます。 例えば、@PRIVACY_SCOPE_CUSTOM_currency@は、インテント拡張ルールで返される通貨値に置き換えられます。