Join our Newsletter — 33% off our NHI Course
Home› Guides› Passkeys for Payments: Secure Payment Confirmation, 3DS and…
Guide Authentication

Passkeys for Payments: Secure Payment Confirmation, 3DS and SCA With WebAuthn

← All guides
By NHI Mgmt Group, edited by Lalit Choda Updated 12 November 2026 13 min read
On this page

A passkey proves that the cardholder is present, but on its own it does not prove which payment they agreed to, and that gap is exactly what payment regulation and payment fraud are about. Secure Payment Confirmation (SPC) is the W3C web API that closes it: the browser shows the payee, amount and payment instrument in its own dialog, and the passkey signs those details. This guide goes deeper than the overview pages on the mechanics an issuer, payment service provider (PSP) or merchant must get right: registering payment passkeys, calling SPC from a merchant page, verifying the signed transaction data, mapping the design to strong customer authentication (SCA) and dynamic linking under the PSD2 regulatory technical standards, and where SPC sits inside EMV 3-D Secure. It is for payments architects, issuer authentication teams and fraud engineers. Transaction signing in general is covered in the Transaction Authorisation Guide, and the 3DS protocol in the EMV 3-D Secure Guide.

Source note: the PSD2 RTS and W3C specification points on this page are paraphrased from Commission Delegated Regulation (EU) 2018/389 on EUR-Lex and the W3C Secure Payment Confirmation draft, checked on 12 November 2026. Confirm against the official text before relying on it.

Key takeaways

  • SPC binds the passkey to the transaction. The authentication client data has type payment.get and carries the payee, total and instrument that the browser displayed, all covered by the passkey signature.
  • Registration is stricter than an ordinary passkey. The payment extension with isPayment: true requires a platform authenticator, a discoverable credential and userVerification: "required".
  • A merchant can run the ceremony with the bank's passkey. Credentials registered as payment credentials are third-party enabled, so the merchant or PSP page calls SPC and the relying party verifies the result.
  • The bank must check what was signed. The merchant supplies the displayed amount and payee, so the relying party verifies total, instrument, payeeName or payeeOrigin against its own record of the transaction.
  • SCA evidence comes from the server checks, not the API. Article 5 of the PSD2 RTS requires the code to be specific to amount and payee and invalidated by any change; SPC supplies the signed data, and the PSP's verification makes it compliant.

Where SPC fits among payment authentication patterns

Passkeys appear in payments in several ways. They differ in who holds the credential, what is signed and who verifies it.

PatternWho is the relying partyWhat the signature coversTypical use
Passkey sign-in to banking or merchant accountBank or merchantA login challenge onlyAccount access; not transaction approval on its own
Passkey with server-rendered confirmationBankA challenge the server binds to a stored transaction recordOnline banking payments in the bank's own app or site
Secure Payment ConfirmationBank, issuer or PSP; ceremony may run on the merchant pageChallenge plus payee, total and instrument shown in a browser dialogCard and account payments at checkout, including inside 3DS flows
Native app signingBank appTransaction data signed with an app-held keyMobile banking approvals and decoupled authentication

The difference that matters is that with SPC the browser, not the merchant page, draws the confirmation and the client data records what it drew. A malicious script on the merchant page can still try to change the amount sent to the bank, but the signed data will then not match the bank's record.

Specification status and building blocks

As checked on 12 November 2026, Secure Payment Confirmation is a W3C Candidate Recommendation Draft dated 13 October 2026 from the Web Payments Working Group. Draft details can change, so pin implementations to tested browser behaviour and re-check the specification before relying on newer members such as browser bound keys. SPC builds on Web Authentication Level 3, a W3C Recommendation dated 25 August 2026, and on the Payment Request API.

Building blockName in the specificationPurpose
Registration extensionpayment extension with isPayment: trueMarks the credential as usable for payments and enables third-party ceremonies
Payment method identifiersecure-payment-confirmationUsed in new PaymentRequest(); must be the only method in that request
Request dictionarySecurePaymentConfirmationRequestRequired: challenge, rpId, credentialIds, instrument; optional: payeeName, payeeOrigin, paymentEntitiesLogos, timeout, extensions, locale, showOptOut, browserBoundPubKeyCredParams
InstrumentPaymentCredentialInstrumentdisplayName and icon (both required), iconMustBeShown, details
Signed client datatype payment.get with rpId, topOrigin, payeeName, payeeOrigin, paymentEntitiesLogos, total, instrumentWhat the relying party verifies against its transaction record
Availability checksPaymentRequest.securePaymentConfirmationAvailability(), getSecurePaymentConfirmationCapabilities()Feature detection before offering SPC
Browser bound keysbrowserBoundPublicKey, browserBoundSignatureAn additional signature from a key bound to the browser; never a replacement for the passkey signature

Registering payment passkeys

The relying party (normally the issuer or the PSP acting for it) registers the credential with navigator.credentials.create() and the payment extension. The specification requires authenticatorAttachment: "platform", residentKey of required or preferred, and userVerification: "required"; other values throw a TypeError.

  1. Choose the moment. Offer registration after a strong authentication the bank already trusts: a completed 3DS challenge, a signed-in banking session that met SCA, or enrolment in the banking app.
  2. Decide where registration runs. On the bank's own origin, or cross-origin inside an iframe on a merchant or PSP page. The specification lets the payment permissions policy act as an alternative create policy for public-key credentials, so the embedding page must grant payment to the frame. The specification notes that this compatibility route may be deprecated later.
  3. Bind the credential to the instrument. Store the credential ID against the card or account and the cardholder. The specification's privacy section warns that reusing one credential across instruments lets merchants link them; consider a credential per instrument.
  4. Record assurance context. Store how the user was authenticated before registration, the device platform and, where you require it, attestation results, so later risk decisions and audits can rely on it.

Separate payment credentials from login credentials where possible. The specification's security considerations describe a login attack in which an SPC assertion is replayed at a login endpoint, and suggest separating payment and login credentials, for example with a payment subdomain as the RP ID, alongside strict checks of type, challenge and origin.

Running the payment ceremony

  1. Obtain credentials and a challenge. In a 3DS flow the issuer's access control server returns the eligible credential IDs and a transaction-specific challenge; in a delegated or PSP-run flow the PSP obtains them from the relying party.
  2. Feature detect. Call securePaymentConfirmationAvailability() and fall back to the existing challenge (one-time code, banking app approval) if SPC is unavailable.
  3. Build the request. new PaymentRequest([{ supportedMethods: "secure-payment-confirmation", data }], details), where data carries the credential IDs, challenge, rpId, instrument display name and icon, and payeeName or payeeOrigin (which must be https), and details carries the total.
  4. Show from a user gesture. The specification lets user agents reject show() with a SecurityError without transient activation; trigger it from the pay button click.
  5. Handle outcomes. No matching credential and user cancellation both return NotAllowedError, by design, so the caller cannot probe which credentials exist. If showOptOut is set, an OptOutError means the user asked the relying party to forget them; route it to the bank, not the merchant's error page.
  6. Return the assertion to the relying party. The merchant or PSP passes it through the 3DS or PSP channel for verification.

Note that a third-party ceremony throws if extensions is non-empty; the specification disallows WebAuthn extensions in cross-origin ceremonies to protect data such as largeBlob contents.

Verifying the assertion

The specification tells the relying party to run the normal WebAuthn assertion verification steps with SPC-specific changes. Treat each as mandatory.

CheckWhat to compareThreat it addresses
Credentialcredential.id is one of the IDs given to the caller for this transactionCredential substitution
Type and challengetype is payment.get; challenge equals the one issued for this transactionLogin replay, forwarded or raced assertions
Originorigin is the origin expected to call SPC; payment.topOrigin is the expected top-level originCeremony run from an unexpected site
Relying partypayment.rpId matches the relying partyCredential from another RP
Transaction datatotal, instrument, payeeName and payeeOrigin match the bank's record of what should have been shownMerchant page or script displaying different data from what is charged
LogospaymentEntitiesLogos is a strict, ordered subset of the logos expectedMisleading branding in the dialog
User verification and signatureUV flag set; signature valid for the stored public key; browser bound signature verified in addition where usedUnverified presence; substituted keys

The specification is explicit that the merchant supplies the amount, instrument name and icon and payee details, and could supply incorrect ones; the bank's comparison against its own transaction record is what makes the signature meaningful.

Mapping SPC to SCA and dynamic linking

For payments in scope of PSD2, Commission Delegated Regulation (EU) 2018/389, the regulatory technical standards on strong customer authentication, sets the technical rules. The relevant articles map onto an SPC design as follows.

RTS articleRequirement (paraphrased from EUR-Lex)How an SPC design addresses it
Art. 4 Authentication codeAt least two elements; code accepted once, unforgeable, reveals nothing about the elements; failures do not reveal which element failed; no more than five consecutive failed attempts in a given periodSingle-use challenge per transaction; uniform error handling; attempt counting at the relying party
Art. 5 Dynamic linkingPayer made aware of amount and payee; code specific to that amount and payee; any change invalidates it; confidentiality, authenticity and integrity of amount and payee throughoutBrowser-drawn dialog shows payee and total; signed client data covers them; bank rejects any mismatch with its record
Art. 7 PossessionMitigate unauthorised use of possession elements and prevent their replicationDevice-held private key; assess synced passkeys carefully, because syncing copies the key across a user's devices by design
Art. 8 InherenceVery low probability of an unauthorised party being authenticated; devices resist misusePlatform biometric used for user verification, enforced by userVerification: "required"
Art. 9 IndependenceBreach of one element does not compromise others; on multi-purpose devices, separate secure execution environments and tamper checksPlatform authenticator key storage and OS biometric isolation; record device integrity signals where available

Whether a particular passkey configuration counts as two independent SCA elements is a judgement for the PSP and its competent authority, and synced passkeys raise the Article 7 replication question directly. Document the analysis, keep evidence of user verification per transaction, and confirm the current position with your regulator. Successor EU payment legislation has been under negotiation; check its current status on EUR-Lex before planning against it. The UK, US and other markets have their own rules and card scheme requirements.

SPC inside EMV 3-D Secure

For card payments, SPC most often runs as an authentication method inside a 3DS flow rather than as a separate integration: the issuer decides whether to offer it, the merchant or 3DS server invokes it with the credential list the issuer returns, and the result goes back to the issuer through 3DS messaging. The protocol versions, message fields and transaction status values are set out in the EMV 3-D Secure Guide. Practical points for the passkey side:

  • Issuers: own registration and verification; keep the credential-to-card binding and SCA evidence in the access control server's records.
  • Merchants and PSPs: render nothing of your own for the confirmation; pass the issuer's credential list and challenge unchanged, and grant payment to any iframe that registers or authenticates.
  • Delegated authentication: where a scheme or issuer lets a PSP or wallet act as relying party, the PSP takes on the verification table above and the evidence duties that go with it.

Decision guidance

  • Issuers with high challenge volumes: SPC replaces one-time passcodes with a phishing-resistant, transaction-bound signature at checkout; start with cardholders who already use passkeys in the banking app.
  • Banks with a strong mobile app: in-app signing or decoupled approval may cover most payments; add SPC for browser checkouts on desktop. On the bank's own site, a passkey ceremony with mediation: "required", which MDN suggests for sensitive operations such as reauthenticating before a payment, plus server-rendered transaction details, is the simpler route.
  • Merchants: rely on your PSP and the issuer's 3DS flow; do not build your own payment passkey relying party unless you are the account holder's bank or a regulated PSP doing delegated authentication.
  • Small PSPs: use a certified 3DS server or authentication provider that supports SPC rather than implementing verification yourself.
  • Agent-initiated payments: an AI agent should not hold or trigger a user's payment passkey; human confirmation of the amount and payee is the point of the control. See the Agent Payments Protocols Guide.

Detection and measurement

  • Log per transaction: credential ID, UV flag, origin and topOrigin, payee and total as signed, verification result and which check failed.
  • Mismatch rate: assertions where signed total, instrument or payee differ from the bank's record; any rise suggests page tampering or integration faults.
  • SPC coverage: share of challenged transactions completed with SPC rather than a one-time code.
  • Abandonment and fallback: SPC prompts that ended in cancellation or fallback, by browser and platform.
  • Fraud outcome: fraud reports on SPC-authenticated transactions against other methods, watched together with authorised push payment scams, which SCA does not stop. See the Authorised Push Payment (APP) Fraud Guide.

Common failure patterns

  • Verifying the signature but not the data: accepting a valid assertion without comparing total and payee to the transaction record turns SPC back into a login.
  • Shared login and payment credentials: the same credential and RP ID for sign-in and payments, opening the login replay route the specification describes.
  • Weak registration: registering payment passkeys after only a password or SMS step, so the passkey inherits weak assurance.
  • Treating SPC as a fraud cure: a deceived customer will approve a scammer's payee in the browser dialog; social engineering controls still matter.
  • Merchant-side error handling: showing an OptOutError or NotAllowedError as a payment failure instead of falling back to the issuer's other method.

Framework mapping

FrameworkReferenceRelevance
PSD2 RTS (EU) 2018/389Articles 4, 5, 7, 8, 9SCA elements, authentication code and dynamic linking
NIST SP 800-53 Rev. 5IA-2, IA-2(8), IA-5User authentication, replay resistance, authenticator management
NIST CSF 2.0PR.AA-03Users, services and hardware are authenticated
OWASP ASVS 5.0V6.3.3, V6.3.8Multi-factor or combined authentication; no enumeration through failures
MITRE ATT&CKT1557 Adversary-in-the-Middle, T1111 Multi-Factor Authentication InterceptionRelayed one-time codes that SPC replaces

Practitioner checklist

  • Register payment passkeys with the payment extension only after an authentication that met SCA.
  • Use a dedicated payment RP ID and keep payment credentials separate from login credentials.
  • Issue a single-use, transaction-specific challenge and expire it with the transaction.
  • Verify type, challenge, origin, topOrigin, rpId, UV and signature on every assertion.
  • Compare signed total, instrument, payeeName and payeeOrigin to the bank's transaction record and reject mismatches.
  • Trigger show() from the pay button and fall back cleanly to the issuer's existing challenge.
  • Document how the design meets RTS Articles 4, 5 and 7 to 9, including your position on synced passkeys.
  • Monitor mismatch, fallback and fraud rates per browser and platform.

Standards and references

Related NHI Mgmt Group resources: Transaction Authorisation Guide · EMV 3-D Secure Guide · Passwordless and Passkeys Guide · Passkey Autofill and Conditional UI. This guide summarises the PSD2 regulatory technical standards and is not legal advice.

Free weekly newsletter

Subscribe to the NHI & AI Identity Journal

The latest on NHI and Agentic AI security – articles, research, breaches, news and events every week.

Bonus 33% off our NHI Course when you subscribe.

NHIMG Editorial Note
Researched and written by the NHI Mgmt Group editorial team using AI tools, under the editorial direction of Lalit Choda. Facts are drawn from the sources listed on this page and checked by our automated quality process. Last updated 12 November 2026. Spotted an error? Use our contact page.
NHI Mgmt Group, the independent authority on Non-Human Identity, IAM and Agentic AI security. nhimg.org