3D Secure
EMV® Three-Domain Secure (3DS) is a messaging protocol developed by EMVCo (Europay, Mastercard, Visa and some other card schemes) to enable consumers to authenticate themselves with their card issuer when making card-not-present (CNP) e-commerce purchases. The additional security layer helps prevent unauthorized CNP transactions and protects the merchant from CNP exposure to fraud. This service is available in Canada as well as in USA.
Berkeley's implementation of 3D Secure allow our clients to take the advantage of risk-based authentication and liability shift that 3D Secure offers with the benefits of DirectSend real-time transactions.
In order to call the 3DS endpoints a cardholder and financial account need to be created.
All versions of 3D Secure supports 'risk based authentication`. This is where the consumer's bank (the issuer) uses information gathered from the user as well as the user's device information to authenticate the user. If they are able to do so without soliciting additional info from the consumer this is considered 'risk based authentication' and the process continues seamlessly without additional input from the consumer
Step 1 - Tokenize card
Tokenize an existing card using the V1 or V2 tokenization endpoints
Step 2 - Create account holder
Create an account holder using https://developers.berkeleypayment.com/reference/createaccountholder-1
You will need the id of the response in the next step
Step 3 - Create financial account
This links the cardholder to the financial account. Use https://developers.berkeleypayment.com/reference/createfinancialaccount-1 passing the id from the Create account holder step into account_holder_id
You will need the id of the response in the next step, this the financial account token.
Step 4 - Authenticate browser
Call AuthenticateBrowser passing in the id from step 3 into the financial_account parameter.
The first payment request creates the 3DS authentication transaction, giving us the required data to communicate with the ACS performing risk based authentication. When securing card payments in the browser, the response from the /authenticate/browser
determines which ACS (bank or bank partner) does a risk assessment of the transaction. The data returned will be different for 1.0 and 2.0 responses.
- The response should be used to setup the iFrame that will handle the device fingerprinting.
- Key response fields:
method_url
: This is the url used to gather device information.three_ds_method_data
: Base64 encoded json with the notificationUrl, transactionId to send to the ACS for device fingerprinting. This should be setup in a 1x1 iframe.
- There are two types of responses.
- Most cases, the 2.0 responses will have a
method_url
that indicates an iframe needs to be created for fingerprinting. Follow the next steps in order to move forward. - In rare occasions the response will return without a
method_url
. In that case, fingerprinting will not need to happen but instead, take the transaction ID and make the call straight to get the results.
- Most cases, the 2.0 responses will have a
Step 5
Device Fingerprinting
A URL and data is returned in the authenticate/browser. The URL is the where you will post the iframe and pass in the data that was given. This is the fingerprinting portion. The ACS will connect to the browser and extract meta data that will be cross referenced with the clients purchase history. Based on that information the transaction will be authenticated.
In your browser, you need to create a hidden iframe and POST with the appropriate content based on the protocol version you received in the previous call.
three_ds_method_data
andmethod_url
Browser ONLY
This portion of the flow needs to happen in a browser. There is no other way around it.
Browser ONLY
This portion of the flow needs to happen in a browser. There is no other way around it.
<iframe id="somethingUnique" style="display:none">
<html>
<body>
<form name="sendFingerprint" action="method_url" method="post">
<input name="threeDSMethodData" value="three_ds_method_data" />
</form>
</body>
<script type="text/javascript">
setTimeout(function() {
document.createElement('form').submit.call(document.sendFingerprint);
}, 100);
</script>
</html>
</iframe>
Step 6
Make Get 3DS Status API call
After the fingerprinting is finished, a GET call will need to be made. The response returned will advise if the transaction got authenticated, not authenticated, or challenged.
Your request to retrieve tokens can last up to 15 seconds. During that time, we continually listen for updates. Therefore, you will get the authentication results as soon as they are available!
- Check for the status of the device fingerprinting with the ACS using the Get Status API request
- Key response fields:
status
: Current status of 3DS authentication.acs_url
: Fully qualified URL of the ACS to be used for the challenge.creq
: Base64 encoded CReq that needs to be sent to the ACS when the status is C (challenge required)
- In the case that status is
authenticated
this is the final step for a successful authentication. The 3DS authentication id can be attached to an associated transaction request.
Information
For the purposes of DirectPull transactions, the following properties are important
- eci
- authentication_value
- id
You will need to pass the 3DS authentication id
in the three_d_secure_id
field of the DirectSend Create Pull Transaction
Step 7
Challenge Request
In case of status is challenge_required
we know that the ACS requires a challenge. As such, there are a couple more steps to respond to a 2.0 challenge.
Open the Challenge Request URL in an iframe
From the previous response, we need to extract the acs_url
and the creq
properties.
In the browser, we will setup an iframe which sends the CReq to the ACS URL (similar to the device fingerprinting)
The ACS will then present a UI within that iframe for the user to complete.
Example of a ACS challenge iframe form:
<iframe id="anotherUniqueID" style="display:none">
<html>
<body>
<form name="sendChallenge" action="https://acs-server-sandbox.3dsintegrator.com/v2/challenge/ui" method="post">
<input name="creq" value="eyJtZXNzYWdlVHlwZSI6IkNSZXEiLCJtZXNzYWdlVmVyc2lvbiI6IjIuMS4wIiwidGhyZWVEU1NlcnZlclRyYW5zSUQiOiIyNzljZjUwYy1lZjM2LTQzMTMtYjA0ZC05NGNlZGZhZWRmZDQiLCJhY3NUcmFuc0lEIjoiZDZmMTVhYWUtMmM5ZC00MzMzLWE5MjAtOTU0YmUwN2MwYzc2IiwiY2hhbGxlbmdlV2luZG93U2l6ZSI6IjA0In0=" />
</form>
</body>
<script type="text/javascript">
setTimeout(function() {
document.createElement('form').submit.call(document.sendFingerprint);
}, 100);
</script>
</html>
</iframe>
In 2.0, the challenge flow requires 2 iframe:
- The initial browser fingerprinting for sending the
three_ds_method_data
- The challenge UI for sending the CReq and responding to the challenge
This is different from 1.0 . In 3DS version 1, only one iframe is required. When integrating, ensure that two separate iframes can be used!
Retrieving Results for a Challenge
After completing the challenge requests, we make another Get Status request.
Recurring Transactions
In general, for the very first transaction when a customer sets up a recurring payment, it is recommended that you establish a secure authentication by requesting a cardholder challenge (challenge_indicator = 03). Any subsequent transactions are out of scope from the 3D Secure requirements.
Original 3-D Secure only provided chargeback protection against the first transaction whereas EMV 3DS protects all recurring transactions.
By applying 3D Secure to the first transaction or verification, you signal to the card issuer that you have established a mandate between you and your customer to charge their payment method for subsequent recurring payments as detailed in your terms and conditions. Such subsequent transactions are out of scope from PSD2 SCA requirements.
Related pages