One of the more difficult problems to solve when using CIBA for decoupled authentication comes in identifying the correct user. In a redirect model, the merchant doesn’t ever need to know the user’s identity at the bank; this identification step is taken care of directly on the bank’s own site after the first redirect. In a decoupled flow, this isn’t possible, since the user is never redirected. Rather, the merchant needs to do something in order to provide the bank with a hint regarding the shopper’s identity. This should ideally provide as much protection of their privacy as possible; hence simply asking them to enter their Online Banking User ID is perhaps not the best approach!
The three scenarios below demonstrate alternative options for how this could be done. In each case, I’ll start with a quick video showing the journey that our mystery shopper (and AnyBank account holder), Angela, will experience when buying sporting apparel from the Limitless Ambition website. I’ll then go into a few details about each flow, hopefully without overwhelming technical specifics.
Option 1: Check Out with a One-time User ID
We start with a scenario where the shopper, Angela, has never previously used her AnyBank account to make a purchase with Limitless Ambition. In this case, she uses a specially generated one-time user ID to start the process. This one-time user ID is generated within her AnyBank mobile app, using a secure process between the app and the AnyBank back end. The one-time user ID is associated with Angela’s account and can only be used once; it’s up to the bank’s back-end infrastructure to maintain the association of that ID to Angela’s real identity.
Angela can safely provide this identifier directly to Limitless Ambition, and when the website starts the CIBA decoupled authentication flow to approve the payment, they send this one-time user ID to the AnyBank OpenID Provider as a login hint. AnyBank uses PingFederate, which allows them to de-reference the one-time user ID to determine Angela’s real user name via a simple API call, before using PingID SDK to send the payment approval message to the correct mobile phone.
This pattern may not necessarily offer the best user experience on a website, due to the need to generate and then type in a one-time user ID. If Angela were making a payment via a point-of-sale device, such as an in-store kiosk, though, it could be a lot more useful. In this case, the AnyBank app would display the one-time user ID as a QR code, which the kiosk could scan, rather than needing her to type anything.
Option 2: Check Out with a QR Code
An alternative to the approach above starts with the same precondition: Angela has never previously used her AnyBank account to make a purchase with Limitless Ambition. In this case, however, Limitless Ambition is going to generate a unique reference for the payment transaction and use that value as the login hint that it sends to AnyBank as part of the CIBA call. (Those familiar with the specifics of the Open Banking payment flows will no doubt realize that the merchant could use the Intent ID that the bank sends after payment staging as a ready-made, unique identifier for this purpose.)
In this case, Limitless Ambition encodes the unique reference in the form of a scannable QR code and displays it on their web page. Angela needs to scan this code with the AnyBank mobile app in order to approve the payment and complete her order.
What makes this flow a little unusual is that the merchant (Limitless Ambition) is not able to provide AnyBank with a login hint that identifies the user in any way. The login hint is merely a reference known to both parties and it is up to AnyBank to “figure out” who the user is after the fact. By scanning the QR code with her mobile app, Angela is able to claim the transaction. And, since her mobile app has her identity and also has the unique reference, it can now make a secured call to the AnyBank back end to associate her identity with that transaction reference, obtain additional details about the staged payment, and capture her consent and approval, prior to AnyBank releasing the appropriate tokens to the merchant.
Option 3: Use a Saved Identity Token
The third option is the most seamless of all from the shopper’s perspective, but does start with a different assumption. In this case, Angela has previously used her AnyBank account to pay for a purchase from Limitless Ambition, perhaps using one of the above flows, or even a previous redirect-based process. We can assume that Limitless Ambition has held on to the ID Token that it received from AnyBank during that process and has stored it safely in their own back-end directory, associated with Angela’s Limitless Ambition account.
Any time Angela now wishes to make a purchase from the site, Limitless Ambition can directly launch a decoupled authentication, passing this saved token as an ID Token Hint, as described in the CIBA specification.
AnyBank’s OpenID Provider, powered by PingFederate, is able to extract enough information from this previous ID Token that it is able to determine that the user is Angela, even if the ID Token itself does not contain her actual user name. PingFederate then uses PingID SDK to send a detailed transaction approval message to Angela’s mobile device, without her needing to do anything else.
Note that in all of the above cases, Limitless Ambition remains in full control of the end-to-end user experience without needing to ever redirect Angela’s browser away from their website.