取引で Secure Payment Confirmation(SPC)を使用するには、次の手順を行う必要があります。 認証システムを登録します。このプロセスは WebAuthn と 登録プロセスに加え、お支払いの延長も行わなければなりません。
この記事では、証明書利用者(RP)として機能するカード発行会社が SPC 登録を実装する必要があります。ユーザー エクスペリエンスについては、 安全なお支払いの確認の概要
安全な支払い確認の登録の仕組みを教えてください。
SPC は WebAuthn 標準の拡張機能として構築されています。
2022 年 4 月現在、SPC はユーザー確認プラットフォーム認証システムのみをサポートしています (UVPA)を使用します。つまり、お客様はデスクトップ パソコンまたはノートパソコンを使用している必要があります。 次のような認証システムが組み込まれています。
- macOS デバイスでの Touch ID などのロック解除機能
- Windows デバイスの Windows Hello
デバイスを登録する
リライング パーティ(RP)によるデバイスの登録は、 十分に強力なユーザー確認プロセスが必要です。RP は、すべての Pod が 強力な認証を使用してウェブサイトにログインしたので、 簡単に不正使用されないようにできます。注意: このプロセスにはセキュリティの欠如 SPC もリスクにさらされます
RP でお客様の認証が正常に完了したら、お客様は次のことができます。 デバイスを登録できます。
機能検出
RP は、お客様にデバイスの登録を求める前に、 SPC をサポートしています。
const isSecurePaymentConfirmationSupported = async () => {
if (!'PaymentRequest' in window) {
return [false, 'Payment Request API is not supported'];
}
try {
// The data below is the minimum required to create the request and
// check if a payment can be made.
const supportedInstruments = [
{
supportedMethods: "secure-payment-confirmation",
data: {
// RP's hostname as its ID
rpId: 'rp.example',
// A dummy credential ID
credentialIds: [new Uint8Array(1)],
// A dummy challenge
challenge: new Uint8Array(1),
instrument: {
// Non-empty display name string
displayName: ' ',
// Transparent-black pixel.
icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+P+/HgAFhAJ/wlseKgAAAABJRU5ErkJggg==',
},
// A dummy merchant origin
payeeOrigin: 'https://non-existent.example',
}
}
];
const details = {
// Dummy shopping details
total: {label: 'Total', amount: {currency: 'USD', value: '0'}},
};
const request = new PaymentRequest(supportedInstruments, details);
const canMakePayment = await request.canMakePayment();
return [canMakePayment, canMakePayment ? '' : 'SPC is not available'];
} catch (error) {
console.error(error);
return [false, error.message];
}
};
isSecurePaymentConfirmationSupported().then(result => {
const [isSecurePaymentConfirmationSupported, reason] = result;
if (isSecurePaymentConfirmationSupported) {
// Display the payment button that invokes SPC.
} else {
// Fallback to the legacy authentication method.
}
});
認証システムを登録する
SPC にデバイスを登録するには、以下を使用して WebAuthn の登録プロセスを行います。 要件:
- プラットフォーム認証システムが必要です。
authenticatorSelection.authenticatorAttachment
はplatform
です。 - ユーザー確認が必要です。
authenticatorSelection.userVerification
はrequired
です。 - 検出可能な認証情報(常駐キー)が必要です。
authenticatorSelection.residentKey
はrequired
です。
さらに「payment」も指定isPayment: true
を含む拡張子。指定
この拡張機能が上記の要件を満たさない場合、例外がスローされます。
その他の注意点:
rp.id
: RP のホスト名。 eTLD+1 の部分は、 ドメインは登録されている場所と一致している必要があります。用途 eTLD+1 に一致するドメインで認証を行えます。user.id
: ユーザー識別子のバイナリ式。同じ識別子 が認証に成功すると返されるため、RP は カード所有者の一貫したユーザー識別子。excludeCredentials
: RP が回避できる認証情報の配列 同じ認証システムを登録する場合です
WebAuthn の登録プロセスの詳細については、 webauthn.guide.
登録コードの例:
const options = {
challenge: new Uint8Array([21...]),
rp: {
id: "rp.example",
name: "Fancy Bank",
},
user: {
id: new Uint8Array([21...]),
name: "jane.doe@example.com",
displayName: "Jane Doe",
},
excludeCredentials: [{
id: new Uint8Array([21...]),
type: 'public-key',
transports: ['internal'],
}, ...],
pubKeyCredParams: [{
type: "public-key",
alg: -7 // "ES256"
}, {
type: "public-key",
alg: -257 // "RS256"
}],
authenticatorSelection: {
userVerification: "required",
residentKey: "required",
authenticatorAttachment: "platform",
},
timeout: 360000, // 6 minutes
// Indicate that this is an SPC credential. This is currently required to
// allow credential creation in an iframe, and so that the browser knows this
// credential relates to SPC.
extensions: {
"payment": {
isPayment: true,
}
}
};
try {
const credential = await navigator.credentials.create({ publicKey: options });
// Send new credential info to server for verification and registration.
} catch (e) {
// No acceptable authenticator or user refused consent. Handle appropriately.
}
登録が成功すると、RP は認証情報を受信してサーバーに送信して検証を行います。
登録の確認
サーバー上で、RP は認証情報を検証し、公開鍵を保持する必要があります。 使用できます。サーバーサイドの登録プロセスは、通常の WebAuthn 登録と同じです。なし SPC に準拠するために追加の情報が必要です。
iframe 内からの登録
支払人が RP(支払い発行者)にデバイスを登録していない場合、 販売者のウェブサイトで登録できること。認証に成功した後 購入時に、RP は支払人にデバイスの登録をリクエストできる (iFrame 内から直接)
これを行うには、販売者または親が、このアクションを 権限ポリシーを使用してください。 カード発行会社は、iframe 内に認証システムを登録する場合と同じ手順を行います。
販売者が登録を許可する方法は 2 つあります。
販売者のドメインから配信される HTML の iframe タグでは、次のように
allow
属性が追加されます。<iframe name="iframe" allow="payment https://spc-rp.glitch.me"></iframe>
allow
属性にpayment
と、WebAuthn 登録を呼び出す RP オリジンが含まれていることを確認します。(販売者のドメインから配信される)親フレーム ドキュメントは、
Permissions-Policy
HTTP ヘッダーとともに送信されます。Permissions-Policy: payment=(self "https://spc-rp.glitch.me")
次のステップ
デバイスが証明書利用者に登録されると、顧客は販売者のウェブサイトで安全な支払い確認を使用して支払いを確認できます。
- 安全な支払い確認による認証方法を学習する。
- 安全なお支払いの確認の概要を確認する