3D Secure (3DS)
This guide explains the integration process for the 3D Secure feature, including the necessary endpoints and webhooks you need to integrate into your solution.
Introduction
What is 3DS?
3D Secure (3DS) (also known as payer authentication) is a security protocol that adds an additional layer of protection to online credit and debit card payments. "3DS" refers to three domains which interact using the protocol: the merchant/acquirer domain, the issuer domain, and the interoperability domain.
How does 3DS work?
3DS requires customers to complete an additional verification step with their card issuer during the final stage of checkout in an e-commerce transaction. Typically, customers get forwarded to their bank to authenticate the payment by entering a one-time SMS code, biometrics, bank app, or other authentication methods. Some common examples of 3DS include Verified by Visa, Mastercard SecureCode, and American Express SafeKey.
3DS reduces the risk of fraud and increases protection for both the seller (merchants) and the cardholder (customers). As 3DS payments are considered secure, the customer's bank becomes liable for any fraud, which makes it a powerful tool for online sellers.
European PSD2 and Strong Customer Authentication (SCA) regulations require the use of 3DS for online card payments. PSD2 requires all issuers to apply Strong Customer Authentication (SCA) for 3DS online payments, which includes two-factor authentication (2FA). For more information about how to implement SCA in your solution, see the Strong Customer Authentication guide.
note
Please note that not all transactions require SCA. To find out more about SCA use cases and their associated authentication methods, see the SCA use cases.
3DS with Solaris cards
Solaris offers the following authentication methods for 3DS. Both methods are accessed through your application:
- In-app method: A biometric factor inside a mobile banking app (in-app push notifications, i.e., device signing).
- SMS OTP: A one-time password (OTP) sent to customers via SMS on their verified mobile number.
note
You are required to provide both options to your customers. Additionally, you must display the merchant name and the amount to the cardholder during the authentication process.
Requirements
You must implement the following features in your solution before you can implement 3DS:
- Customer onboarding with Digital Banking & Cards (debit, credit, or decoupled)
- Device binding
- Strong Customer Authentication
- Device monitoring
Only customers who have been successfully onboarded and identified with an active Solaris account and card (debit, credit, or decoupled) can use 3DS.
Additionally, you must subscribe to the following webhook events:
For more information on subscribing to webhook events, check the dedicated guide.
Authentication steps
- The cardholder initiates the process when paying by card on an e-commerce website.
- The Access Control Server (ACS) receives the 3DS transaction via the card scheme (e.g., Visa or Mastercard).
- The ACS checks if authentication is required for the transaction and sends a notification to Solaris to authenticate the user.
- Solaris sends you a notification on the webhook event
SCA_CHALLENGE
. The webhook payload includes theauthenticate_change_request_id
attribute, which is thechange_request_id
value you need to pass to the change request endpoints. - Send a push notification to the cardholder's mobile app informing them that they must authorize the 3DS challenge.
- The customer should log into your application to accept the 3DS challenge.
- Once the customer decides to accept the 3DS challenge, present them with the option in your frontend to authorize via in-app device signing or SMS OTP.
- Trigger the authentication process by calling POST Authorize change
request. Use the
delivery_method
requested by the customer. - The customer then authorizes the transaction by signing the challenge with the device's unrestricted key or the SMS OTP received from Solaris.
- Confirm the authentication by sending the customer's device signature or SMS OTP to Solaris using POST Confirm change request.
- Solaris sends the cardholder's authentication response to the online merchant via the ACS.
- The merchant sends the transaction to the Card Processor (CP) for a final confirmed/declined authorization.
- (Decline without change request) If the customer wants to decline the 3DS challenge, call the POST/v1/cards/3ds/{challenge_id}/decline endpoint using the
challenge_id
provided in theSCA_CHALLENGE
webhook payload. This endpoint does not use the change request process.
Step 1: Webhook notification
When customers initiate an online card payment and the ACS receives the
transaction and notifies Solaris, you'll receive a notification on the
webhook event SCA_CHALLENGE
. The payload includes the details of the
transaction and the authenticate_change_request_id
, which is the
change_request_id
required in the following steps.
Click here to view a sample SCA_CHALLENGE webhook payload.
Step 2: Authorize change request
POST Authorize change request
After receiving the webhook notification, trigger the change request process by
calling the following endpoint. Supply the value of the
authenticate_change_request_id
property from the webhook payload as the
change_request_id
in the request URL. Additionally, add the following
properties in the request body:
Parameter | Description |
---|---|
delivery_method |
The method to deliver the authorization challenge. |
device_id |
The ID of the customer's registered device approving the transaction. Only include this property if the delivery_method is device_signing. |
person_id |
The person to whom the SMS OTP should be sent. Only include this property if the delivery_method is mobile_number. |
device_data |
Base64-encoded device data collected using the Seon SDK. Details about how to integrate the Seon SDK can be found in the device monitoring guide. |
Request URL
POST /v1/change_requests/{change_request_id}/authorize
Response
The API returns a change request object with a unique id
, which you must use
in the next API call. If you used device signing, then the API will also
return the string for the customer's device to sign in the string_to_sign
property.
Click here to view the full API reference.
Step 3: Notify customer & solve challenge
Now you must send a push notification to the customer informing them that a transaction requires their approval.
When they open your app, you should offer them an interface for resolving the open 3DS challenge:
- For device signing, prompt them to sign the challenge using their device.
- For SMS OTP, prompt them to enter the six-digit code they received from Solaris.
(Device signing only) Collecting the customer's signature
The customer's device must sign the string contained in the string_to_sign
attribute of the response from the previous API call using its unrestricted
key. See the instructions below:
How to sign:
- Create a hash (SHA256) with the
string_to_sign
. - Sign the hash with the device's private key.
- Encode the signature in
ASN.1
format. - Hex encode the
ASN.1
format signature.
POST Confirm change request
Now pass the signature string or the six-digit SMS OTP to Solaris by calling the following endpoint.
You have to add the change_request_id
to the request URL and supply the following
properties in the request body:
Parameter | Description |
---|---|
device_id |
(If the delivery_method was device_signing ) The ID of the customer's bound device used for authorization. |
signature |
(If the delivery_method was device_signing ) The hex-encoded signature generated by signing the text_to_sign with the device's public key. |
person_id |
(If the delivery_method was mobile_number ) The ID of the person who received the SMS OTP for authorization. |
tan |
(If the delivery_method was mobile_number ) The six-digit OTP value that the person received via SMS. |
device_data |
Base64-encoded device data collected using the Seon SDK. Details about how to integrate the Seon SDK can be found in the device monitoring guide. |
Request URL
POST /v1/change_requests/{change_request_id}/confirm
Click here to view the full API reference.
Once the cardholder authorizes the transaction, Solaris sends the cardholder's authentication response to the online merchant via the ACS. Then, the merchant sends the transaction to the Card Processor (CP) for a final confirmation or rejection.
Step 4: Decline a 3DS challenge without change request
If the customer wants to decline the 3DS challenge, you can call the following endpoint to decline the challenge without using the change request process.
POST Decline a 3DS authentication
Call this endpoint to decline a 3DS challenge and add the challenge_id
returned in the SCA_CHALLENGE
webhook payload in the request URL.
Request example
POST /v1/cards/3ds/{challenge_id}/decline
Click here to view the full API reference.
Testing
Solaris offers a number of endpoints for testing different 3DS scenarios. Note that these endpoints are only available on Sandbox.
Create test 3DS transaction
This endpoint creates a test 3DS transaction for a card. The API will return a JSON schema containing the HTML for the 3DS challenge screen.
URL:
POST /v1/cards/{card_id}/test_3ds_authentication
Click here to view the full API reference.
Simulate an authorization
This endpoint creates a simulated card authorization for the purpose of testing approval & denial flows.
URL:
POST /v1/cards/{card_id}/simulator/transactions/authorization
Click here to view the full API reference.
Simulate the settlement of an authorization
This endpoint executes a test card authorization settlement for the given card
and transaction_key
(retrieved from the endpoint described above).
URL:
POST /v1/cards/{card_id}/simulator/transactions/{transaction_key}/settle
Click here to view the full API reference.
Simulate an unauthorized settlement
This endpoint creates a simulated unauthorized settlement. It returns a transaction_key
that corresponds with the settlement.
URL:
POST /v1/cards/{card_id}/simulator/transactions/settle
Click here to view the full API reference.
Simulate an expired card authorization
Use this endpoint to mark a test authorization (created using the Simulate an authorization endpoint) as expired.
URL:
POST /v1/cards/simulator/authorization/{transaction_key}/expire
Click here to view the full API reference.
Appendix I: Glossary
- 3DS: 3D Secure
- ACS: Access Control Server (external service provider)
- CP: Card processor (external service provider)
- MPI: Merchant Plug-in (an external service provider that merchants use to connect to the servers of card schemes, e.g., Visa or Mastercard)
- OTP: One-time password