The modern digital payment landscape demands a delicate balance between user convenience and robust security. As high-value operations and online transactions scale globally, standard password-based authentication is no longer sufficient to deter sophisticated fraud.
That is why, to safeguard consumer data and financial transactions, regulatory frameworks like the European Union's PSD2 have introduced strict compliance mandates. Chief among these is Strong Customer Authentication or SCA. It is a security protocol that requires multi-factor validation, and binds every approval cryptographically to its specific transaction details like amount and payee.
Today, we are going to explore what SCA is, and the strict regulatory frameworks driving its global adoption. We will also provide a deep-dive architectural breakdown of how LoginRadius enables seamless SCA implementation. You will see how you can secure all transactions easily using cutting-edge identity standards, Identity Orchestration (IO), Pushed Authorization Requests (PAR), and Rich Authorization Requests (RAR).
So, let’s get started!
What is Strong Customer Authentication (SCA)?
Strong Customer Authentication (SCA) is a security protocol designed to minimize fraud and make online ecosystem interactions more secure.
Rather than relying on a single layer of security (like a username and password), SCA enforces multi-factor authentication (MFA) and requires explicit user consent to transactions. Moreover, each transaction is cryptographically bound to a specific amount and payee.
To satisfy SCA requirements, an authentication process must validate a user's identity based on two or more of the following independent categories:
-
Knowledge: Something only the user knows (e.g., a password or PIN).
-
Possession: Something only the user has (e.g., a registered mobile device or token).
-
Inherence: Something the user is (e.g., biometric markers like a fingerprint or facial recognition).

The Dynamic Linking Requirement
For electronic financial transactions, PSD2 mandates a strict security mechanism known as Dynamic Linking.
This requirement means that multi-factor authentication cannot happen in a silo. Instead, the user's authentication approval must be explicitly and cryptographically bound to both the specific transaction amount and the specific payee.
To achieve true legal compliance under this mandate, your authentication architecture must enforce four strict criteria:
-
Informed Consent: The user must be shown the exact payee name and transaction amount at the precise moment of authentication. It cannot be hidden or assumed.
-
Tamper Evidence: If an attacker intercepts the session mid-transit and alters the payee from "Stripe" to "Malicious Actor", or edits the amount from "€500" to "€5,000", the entire authentication state is immediately invalidated.
-
Channel Independence: The generation of the transaction signature should happen out-of-band (such as on a separate, trusted mobile device using an RSA private key) to ensure that a compromised web browser cannot falsify an approval.
-
Idempotency and Uniqueness: The digital signature generated by the user's device must be entirely unique to that single transactional context. It cannot be intercepted and replayed for a subsequent payment.
| Dynamic Linking Rule | Operational Requirement | How Cryptography Enforces It |
|---|---|---|
| Informed Consent | Prompt displays the exact transaction amount and payee name at the exact point of authentication. | Data is encapsulated explicitly in the signed payload. |
| Tamper Evidence | Interception or modification of the payload mid-transit must invalidate the session. | A changing transaction value breaks the downstream SHA256/RSA signature. |
| Channel Independence | Signature generation must happen separate from the primary transaction window (out-of-band). | Executed on a verified hardware/mobile device isolated from a compromised browser. |
| Idempotency | The signature must be single-use and impossible to capture and replay later. | Uses unique server-side cryptographic challenge strings and nonces. |
By implementing Dynamic Linking, businesses eliminate common attack vectors like Man-in-the-Middle (MITM) and Session Hijacking.
Even if a malicious actor completely controls the user's web browser session, they cannot alter the destination or value of the funds without breaking the underlying cryptographic signature.
Why is SCA Critically Needed?
In today’s world, the digital economy faces unprecedented security challenges that legacy authentication methods simply cannot solve.
Traditionally online checkout flows relied heavily on standard passwords, SMS-based one-time passwords (OTPs), or static credit card details (Card-Not-Present transactions).
But these methods leave organizations vulnerable to highly sophisticated attack vectors:
-
Credential Stuffing and Phishing: Static passwords and card details are easily harvested via data breaches and phishing sites, allowing bad actors to impersonate legitimate users effortlessly.
-
SIM-Swapping: Threat actors routinely intercept SMS OTP codes by social-engineering mobile carriers, rendering basic SMS-based multi-factor authentication insecure for high-value banking or retail transactions.
-
Man-in-the-Middle (MITM) Interception: Without a cryptographic link between the session and the payment details, an attacker can hijack an active browser session mid-checkout, altering the destination account or funding amount without the user's knowledge.
Implementing SCA can reduce all these threats to a minimum.
The Strategic Benefits of Implementing SCA
Enforcing a robust, identity-orchestrated SCA framework transforms security from a friction point into a competitive business advantage:
| Business Benefit | Technical Impact |
|---|---|
| Drastic Fraud Reduction | Enforcing possession (e.g., hardware keys) and inherence (e.g., biometrics) prevents account takeovers and fraudulent transactions, directly protecting your bottom line. |
| Chargeback Liability Shift | Under PSD2 guidelines, when a transaction successfully passes strict SCA validation, the financial liability for fraudulent chargebacks shifts from the merchant to the card-issuing bank. |
| Elevated Consumer Trust | Modern consumers are hyper-aware of digital risks. Providing a transparent, cryptographically secure checkout experience reassures users that their financial assets are protected. |
| Streamlined Global Expansion | By building an authentication engine aligned with stringent EU standards, your identity architecture is inherently prepared to meet emerging data protection and financial regulations worldwide. |
By transitioning from fragile, perimeter-based security to a modern identity framework, organizations solve the dual challenge of lowering fraud rates while establishing a baseline of absolute compliance.
The PSD2 Mandate: Who Must Implement SCA?
SCA is not merely an optional framework or an industry technical best practice. It is a strict legal requirement enforced across specific global jurisdictions.
Origin and Jurisdiction
The regulatory foundation for this security mandate was established by the European Union (EU). It governs any business, financial institution, or merchant processing electronic transactions, payment services, or high-value actions where either the payer’s payment service provider or the merchant's provider is located within the European Economic Area (EEA).
The Governing Compliance Directive: PSD2
The specific legal framework driving this requirement is the Revised Payment Services Directive, universally known across the financial and tech sectors as PSD2.
The European Union introduced PSD2 and its constituent SCA provisions with three distinct objectives:
-
Mitigating Fraud: To structurally neutralize escalating digital payment fraud and identity theft in online environments.
-
Securing Open Banking: To foster a collaborative, highly secure open banking ecosystem that safely permits third-party providers access to financial data.
-
Enforcing Unfalsifiable Consent: To guarantee that high-value online operations—such as bank transfers, account modifications, or digital checkouts—are authenticated with explicit, verifiable consumer authorization.
The Consequences of Non-Compliance
The enforcement of PSD2 leaves no room for ambiguity. Any organization failing to properly execute SCA protocols on applicable transactions faces severe consequences, including substantial financial penalties from regulatory authorities and the immediate, systematic rejection of transactions by card-issuing banks (known as "soft declines"). For modern online businesses, maintaining strict compliance is an absolute operational necessity.
Maximizing UX: Managing SCA Exemptions Seamlessly
True compliance doesn't mean forcing a biometric check on every single micro-transaction. Under the PSD2 framework, certain scenarios qualify for SCA Exemptions to eliminate user friction:
-
Low-Value Transactions: Payments under €30 (up to a cumulative limit of €100 or 5 consecutive payments).
-
Low-Risk Transfers: Transactions evaluated as low-risk by real-time Transaction Risk Analysis (TRA) models.
-
Trusted Beneficiaries: Recurring subscriptions or payees explicitly whitelisted by the user.
How to implement this with LoginRadius: You can map these rules cleanly inside your workflow graph. By pulling the payment value from the RAR object early in the Script Node, your serverless execution script can bypass the out-of-band push challenge entirely for low-risk transactions, routing the user instantly to the payment complete page.
How LoginRadius Achieves SCA: The Core Building Blocks
LoginRadius addresses the complex technical demands of PSD2's SCA by combining traditional Customer IAM (CIAM) security with advanced OAuth 2.1 / OIDC capabilities.
SCA cannot be achieved via standard web login flows because passing sensitive transaction details through a public browser URL introduces interception risks.
Instead, LoginRadius utilizes an architecture built upon several specialized protocols and identity components:
| Building Block | Role | Specification / RFC |
|---|---|---|
| PAR (Pushed Authorization Request) | Eliminates front-channel security flaws by sending sensitive authorization parameters over a secure back-channel rather than exposing them in the browser URL. | RFC 9126 |
| RAR (Rich Authorization Request) | Extends standard OAuth requests by attaching fine-grained, structured transaction payloads (authorization_details) directly into the authorization flow. | RFC 9396 |
| Identity Orchestration (IO) Workflow | A server-side logic engine that dynamically coordinates the step-by-step authentication lifecycle: managing session checks, executing risk evaluations, and routing MFA challenges. | Custom LoginRadius Engine |
| Script Node | A serverless JavaScript function embedded in the IO workflow that evaluates real-time risk parameters and can actively block suspicious transactions. | Custom LoginRadius Engine |
| Push MFA / Passkeys | Provides the cryptographic possession and inherence factors needed to satisfy MFA and support secure transaction approvals. | Standard Mobile/FIDO Authenticators |
linking_id | A unique, server-generated UUID that correlates the user's active browser session directly with their external mobile MFA device. | Unique Platform Identifier |
The Role of 3D Secure 2.0 (3DS2) in Identity Orchestration
While LoginRadius handles the identity token verification, cryptographic device binding, and overall risk posture, the standard implementation layer for card-based online transactions is 3D Secure 2.0/2.2 (3DS2).
LoginRadius functions alongside your payment processors (such as Stripe or Adyen). The LoginRadius Identity Orchestration engine serves as the centralized identity provider (IdP) that verifies user authenticity out-of-band, allowing you to pass structured, trusted cryptographic assertions directly to your payment gateway’s 3DS2 execution hooks, resulting in a friction-free transaction approval pipeline.
Architectural Deep Dive: The End-to-End SCA Flow
LoginRadius delivers an end-to-end flow ensuring that sensitive transaction data is securely transmitted, risk is comprehensively evaluated, and the user's approval is cryptographically linked to the transaction.
The 10-Step Execution Lifecycle
-
Initiate PAR & RAR Payload: The customer application initiates a transaction by sending a secure backend
POSTrequest to the LoginRadius/parendpoint. This payload includes standard OpenID Connect parameters accompanied by structured RARauthorization_details(defining the specific transaction type, amount, currency, and payee). -
Opaque Token Generation: Upon receiving the backend request, LoginRadius generates a secure, short-lived
request_uriand a platformlinking_id. Crucially, none of the fine-grained payment data or sensitive identifiers are exposed to the public browser. -
Browser Redirection: The customer application redirects the consumer's web browser to the
/authorizeendpoint, passing only the opaquerequest_urias a query parameter. -
IO Workflow Trigger: The LoginRadius Authorization Server resolves the
request_urion the backend and immediately launches the designated Identity Orchestration (IO) Workflow. -
Session Verification Gateway: The workflow hits a Has Session node. If no active session exists, the system spins up a child authentication workflow to log the user in, subsequently returning them to the SCA script.
-
Serverless Risk Evaluation: The workflow executes a Script Node. This serverless JavaScript function reads the transaction's
authorization_detailsdirectly from the secureSharedStatecontext. It passes this data to a risk engine to evaluate context. If a high-risk anomaly is detected, it terminates the process immediately via ahook.setError()command. -
Out-of-Band Push Notification: Once risk validation succeeds, the Send Push Notification node triggers an out-of-band notification to the consumer's registered mobile device. The notification leverages
SharedStatetemplate variables to render explicit transaction text, such as: "Authorize payment of €500 EUR to Stripe". -
Mobile Dynamic Linking Validation: The consumer's mobile app utilizes the LoginRadius Mobile SDK to perform a secure backend query (
GET /identity/v2/auth/push/par/{linking_id}). This retrieves the authenticauthorization_detailsalongside a cryptographicchallengestring. -
Cryptographic Device Signing: The user reviews the immutable transaction details on their device screen and provides biometric or PIN approval. The Mobile SDK automatically computes a SHA256 hash containing the verification response and the server challenge, signing it using the device's securely stored RSA private key. The Verify Push Notification node validates this signature against the public key stored on the server.
-
Token Issuance: Once the cryptographic signature is verified, the IO workflow succeeds. LoginRadius returns a standard OIDC authorization code to the browser. The customer application exchanges this code at the
/tokenendpoint to receive anid_tokenstamped with custom claims verifying successful SCA execution.
(Note: If a user explicitly rejects the push notification or lets the validation window time out, the workflow routes to a failure path, updating the session status to reject and returning an OAuth error response without issuing any codes or tokens).
Technical Configuration: Implementing SCA via LoginRadius
For developers and identity architects looking to enforce SCA within the LoginRadius platform, the integration is broken down into three logical phases: OIDC App Configuration, Workflow Topology Construction, and Risk Scripting.
Step 1: Configure the OIDC Application
To prepare your environment, navigate to the LoginRadius Admin Console under Applications → Tokens tab → Authorization Requests.
-
Activate PAR: Toggle Pushed Authorization Request (PAR) to ON. For dedicated payment and checkout applications, enable Require PAR. When enabled, any standard
/authorizecall lacking a securerequest_uriis rejected automatically by the server. -
Activate RAR: Toggle Rich Authorization Request (RAR) to ON. Under Allowed RAR Types, register your specific transaction identifiers (e.g.,
lr_payment). This type validator matches incoming data case-insensitively.
Step 2: Build the SCA Workflow Topology
Using the Identity Orchestration canvas, construct an authentication routing graph using specialized nodes:
1Has Session
2 ├── true → Script (risk evaluation)
3 │ ↓
4 │ Identity Lookup
5 │ ↓
6 │ MFA Configured State
7 │ ├── Push Notification → Send Push Notification → Verify Push Notification → ✅ Success
8 │ ├── Passkey → Verify Passkey → ✅ Success
9 │ └── false (not set up) → Configure MFA
10 │ ├── Push Notification → Configure Push Notification → Verify Push → ✅ Success
11 │ └── Passkey → Verify Passkey → ✅ Success
12 └── false → Child Workflow (login) ──→ Script (loops back after login)The node execution logic handles user states dynamically:
-
hassession: Determines if the request proceeds to transaction checks or redirects to an unauthenticated child login loop.
-
identitylookup & mfastate: Evaluates user records to route users to established authenticators (Push or Passkeys) or prompt a seamless enrollment configuration if it's their first transaction.
-
verifypushnotification: Validates the physical device’s RSA signature while operating in a specialized re-authentication mode to avoid spawning unnecessary new web sessions.
Step 3: Script Node Execution (Risk & Claims Injected)
The serverless JavaScript function running inside the workflow acts as the final gatekeeper. The system pre-populates authorization_details from the secure back-channel payload directly into lrObject.Session.SharedState prior to running the script.
Developers can leverage standard pre-packaged npm libraries (axios, underscore, moment, async, and @slack/webhook) to execute complex transactional logic as seen in the following production blueprint:
1const axios = require("axios");
2exports.execute = async (lrObject, hook) => {
3try {
4// 1. Enforce active authentication
5if (!lrObject?.IsAuthenticated) {
6hook.setError(401, "Not authenticated", "Login required");
7return;
8}
9const email = Array.isArray(lrObject?.Identity?.Email)
10? lrObject.Identity.Email[0]
11: lrObject?.Identity?.Email || "";
12if (!email) {
13hook.setError(400, "Missing email", "Email is required for risk evaluation");
14return;
15}
16// 2. Extract immutable RAR details populated in SharedState
17const sharedState = lrObject?.Session?.SharedState || {};
18const amount = sharedState.amount || "";
19const currency = sharedState.currency || "";
20const payee = sharedState.payee || "";
21// 3. Connect to a custom external Risk Assessment Engine
22const risk = await axios.post("https://risk.example.org/score", {
23email,
24authorization_details: { amount, currency, payee },
25}, { headers: { "Content-Type": "application/json" }, timeout: 5000 });
26// 4. Actively block transactions exceeding safety thresholds
27if (risk.data.score >= 80) {
28hook.setError(403, "HIGH_RISK", Transaction blocked — risk score: ${risk.data.score});
29return;
30}
31// 5. Update SharedState parameters for downstream MFA message templates
32hook.sharedState.set("verified_amount", amount);
33hook.sharedState.set("verified_payee", payee);
34hook.sharedState.set("sca_verified", "true");
35// 6. Inject secure custom cryptographic claims into the final ID Token
36hook.idToken.setCustomClaim("sca_verified", "true");
37hook.idToken.setCustomClaim("risk_score", String(risk.data.score));
38} catch (error) {
39hook.setError(500, "SCA_FAILED", error?.message || "Unexpected error");
40}
41};Endpoint API Implementation Blueprint
1. Pushed Authorization Request (PAR) Endpoint
The application client pushes transaction-specific scopes and structured metadata directly to the backend authorization server.
Request Structure:
1curl --location 'https://{your-domain}/api/oidc/{app-name}/par' \
2--header 'Content-Type: application/x-www-form-urlencoded' \
3--data-urlencode 'client_id={client_id}' \
4--data-urlencode 'redirect_uri={redirect_uri}' \
5--data-urlencode 'scope=openid email profile' \
6--data-urlencode 'response_type=code' \
7--data-urlencode 'response_mode=query' \
8--data-urlencode 'state={state}' \
9--data-urlencode 'workflow=strongcustomerauthentication' \
10--data-urlencode 'authorization_details={"type":"lr_payment","amount":"500","currency":"EUR","payee":"Stripe"}'Response Payload:
1{
2 "request_uri": "urn:ietf:params:oauth:request_uri:07824f9f-4782-4c61-9ac6-d61cf8f7cb09",
3 "expires_in": 90
4}2. Standard Browser Redirection Call
The front-end client safely redirects the user's browser, referencing only the opaque key returned in the previous step.
1curl --location 'https://{your-domain}/service/oidc/{app-name}/authorize?\
2client_id={client_id}\
3&request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3A07824f9f-4782-4c61-9ac6-d61cf8f7cb09'3. Mobile SDK Device Query (Dynamic Linking Resolution)
When a push challenge arrives on the customer's phone, the integrated mobile SDK calls the secure endpoint to resolve the matching details before collecting biometrics.
Request Structure:
1GET /identity/v2/auth/push/par/{linking_id}?apikey={apikey}Response Payload:
1{
2 "authorization_details": {
3 "type": "lr_payment",
4 "amount": "500",
5 "currency": "EUR",
6 "payee": "Stripe"
7 },
8 "challenge": "abc123..."
9}By executing this programmatic cycle, LoginRadius ensures that the final approval generated on the user's hardware device is cryptographically bound to the exact payee and currency details configured at step one, satisfying the legal demands of PSD2 Dynamic Linking.
Conclusion: Balancing Security and Seamless UX
Achieving compliance with strict regulatory frameworks like PSD2 does not mean you have to compromise on the user experience. By leveraging LoginRadius’s Identity Orchestration alongside advanced OAuth specifications like PAR and RAR, enterprises can deploy a highly secure, automated authentication infrastructure that naturally detects risk, guarantees dynamic linking, and effectively mitigates fraud.
Ready to secure your checkout experiences and simplify regulatory compliance? Connect with our experts to see live how SCA actually works on top of LoginRadius. Book a Demo Today!




