Pour utiliser la confirmation de paiement sécurisé (SPC) dans une transaction, le client doit : enregistrer un authentificateur. Ce processus est très semblable à l'authentification WebAuthn procédure d'inscription, avec l'ajout d'une extension de paiement.
Dans cet article, les banques émettrices agissant en tant que parties de confiance (RP) peuvent savoir comment pour implémenter l'enregistrement SPC. Pour en savoir plus sur l'expérience utilisateur, consultez Présentation de la confirmation de paiement sécurisé.
Comment fonctionne l'inscription à la confirmation de paiement sécurisé ?
SPC est une extension de la norme WebAuthn.
Depuis avril 2022, SPC n'accepte que les authentificateurs de plate-forme de validation de l'utilisateur (UVPA) sur ordinateur. Cela signifie que le client doit utiliser un ordinateur de bureau ou portable avec un authentificateur intégré, comme:
- Fonctionnalité de déverrouillage, y compris Touch ID, sur un appareil macOS
- Windows Hello sur un appareil Windows
Enregistrer l'appareil
L'enregistrement d'un appareil par le tiers de confiance doit respecter un processus de validation de l'utilisateur suffisamment solide. Le tiers assujetti à des restrictions doit s'assurer que client s'est connecté au site Web en utilisant une authentification forte afin que n'est pas facile à pirater. Attention: ce processus manque de sécurité met également la SPC en danger.
Une fois que le tiers assujetti à des restrictions a réussi à authentifier le client, celui-ci peut enregistrer un appareil.
Détection de caractéristiques
Avant de demander au client d'enregistrer l'appareil, le tiers assujetti à des restrictions doit vérifier que prend en charge 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.
}
});
Enregistrer un authentificateur
Pour enregistrer un appareil pour SPC, suivez le processus d'enregistrement WebAuthn en procédant comme suit : configuration requise:
- Veuillez indiquer l'authentificateur de plate-forme:
authenticatorSelection.authenticatorAttachment
estplatform
. - La validation de l'utilisateur est requise:
authenticatorSelection.userVerification
estrequired
. - Les identifiants détectables (clés résidentes) sont requis:
authenticatorSelection.residentKey
estrequired
.
Indiquez également un "paiement" avec isPayment: true
. Spécifier
cette extension sans satisfaire aux exigences ci-dessus génèrent une exception
Autres mises en garde:
rp.id
: nom d'hôte de la RP. La partie eTLD+1 du doit correspondre à celui dans lequel il est enregistré. Il peut être utilisé pour sur les domaines qui correspondent à eTLD+1.user.id
: expression binaire de l'identifiant de l'utilisateur. Le même identifiant est renvoyée lors de l'authentification. Le tiers assujetti à des restrictions doit donc fournir l'identifiant cohérent du titulaire de la carte.excludeCredentials
: tableau d'identifiants permettant au tiers assujetti à des restrictions d'éviter l'enregistrement du même authentificateur.
Pour en savoir plus sur le processus d'enregistrement WebAuthn, consultez webauthn.guide.
Exemple de code pour l'inscription:
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.
}
Une fois l'enregistrement réussi, la RP reçoit des identifiants à envoyer au serveur pour validation.
Vérifier l'enregistrement
Sur le serveur, la RP doit vérifier l'identifiant et conserver la clé publique pour pour une utilisation ultérieure. Le processus d'enregistrement côté serveur est identique à un enregistrement WebAuthn ordinaire. Rien supplémentaire est requis pour se conformer aux exigences de la certification SPC.
Enregistrement depuis un iFrame
Si le payeur n'a pas enregistré son appareil auprès de la RP (émetteur du paiement), le payeur peut s’inscrire sur le site Web du marchand. Après une authentification réussie lors d'un achat, le tiers assujetti à des restrictions peut demander au payeur d'enregistrer son appareil indirectement, depuis un iFrame.
Pour ce faire, le marchand ou le parent doit autoriser explicitement cette action dans un iFrame à l'aide des règles d'autorisation. L'émetteur suit la même procédure pour enregistrer un authentificateur dans un iFrame.
Le marchand peut autoriser l'enregistrement de deux façons:
Le tag iFrame du code HTML diffusé à partir du domaine du marchand ajoute un attribut
allow
:<iframe name="iframe" allow="payment https://spc-rp.glitch.me"></iframe>
Assurez-vous que l'attribut
allow
contientpayment
et l'origine RP qui appelle l'enregistrement WebAuthn.Le document de frame parent (diffusé à partir du domaine du marchand) est envoyé avec un en-tête HTTP
Permissions-Policy
:Permissions-Policy: payment=(self "https://spc-rp.glitch.me")
Étapes suivantes
Une fois qu'un appareil est enregistré auprès du tiers de confiance, le client peut confirmer les paiements sur le site Web du marchand à l'aide de la confirmation de paiement sécurisé.
- Découvrez comment vous authentifier à l'aide d'une confirmation de paiement sécurisé.
- Consulter la présentation de la Confirmation de paiement sécurisé