Seventh Sense
Features

SenseCrypt
Technical library

Decoupled auth

CIBA and FAPI-CIBA
for backchannel authentication

FAPI-CIBA / CIBA starts a face check on the enrolled phone through a backchannel push. Your backend starts authentication, the person completes the live face check, and your service validates the returned authentication result.

6 sectionsSeventh Sense / SenseCrypt
On this page

01

How backchannel authentication works

Nothing in this flow involves a redirect or a hosted authorization page. Your backend authenticates as a client, posts a backchannel authentication request carrying exactly one hint about the user, and receives a request handle along with how long the request lives and how often it may be polled.

A backchannel push starts the face check on the enrolled phone. SenseCrypt also emails the sign-in QR to the resolved person. Phone sign-in combines the live face check with a key bound to that enrolled device.

The client that opens the request never becomes the thing that authenticates. Every key and every signature involved in proving who the person is stays on their own handset, and the requesting service only asks and waits. That separation is the reason the pattern suits a terminal that a dozen people touch in a day.

Provide exactly one user hint

A login hint, a login hint token or an ID token hint. Supplying none or two of them is a request error. The scope must include openid, and every scope has to be one your client is allowed to use.

Show a binding message the user can verify

An optional short string, capped at 512 characters, is shown to the user so they can confirm that the request in front of them is the one they started. Keep it human and specific.

No user code, because there is no shared secret

The user code parameter is not supported and a stray one is ignored. Nothing in this flow can be read aloud to a caller or typed into the wrong page.

Requests are rate limited

Per client, and per client and target address, so a runaway loop cannot spray sign-in emails at a person.

02

The prompt starts a live face check

This is where implementations differ most, and it is the difference that matters. An approval that needs only a tap can be worn down: send enough prompts to a tired person and one will be accepted. Here the prompt opens a face check that runs on the phone, and no accept button stands in for it.

It also removes the conversation an attacker needs. There is no code for a caller to talk somebody into reading out, and no approval a help desk can be persuaded to perform on someone's behalf. The 2023 MGM Resorts incident, where attackers reached an IT help desk by phone and impersonated an employee, with an about $100M reported impact, is the shape of attack this closes off.

The requesting station stays empty throughout. A shared terminal running this flow displays what it is told to display and waits for an answer, so when a shift ends there is nothing on it that belonged to the people who just left.

Re-check access throughout the flow

The hint has to resolve to someone who can complete the ceremony and who passes the application's default-closed group gate. A target who cannot fails closed like any other gate failure, with an opaque error.

Use each request handle once, before it expires

It expires, 300 seconds by default for an enrolled-user sign-in, and a successful token response spends it. Retrying with a spent handle is not the recovery path; starting a fresh request is.

Respect the server's polling interval

Polling faster earns a slow down response. The default cadence is five seconds, and an authorization pending response simply means the person has not finished yet.

Error handling and privacy

The token endpoint returns authorization pending, slow down, expired, or access denied. Access denied covers both a declined request and a failed ceremony, deliberately, so the response cannot be used as a probe.

03

Where CIBA fits

Three situations fit: the person is somewhere other than the client, the client has a screen nobody should trust, or the client has no browser whatsoever. Call center verification is the first, a shared terminal or point-of-sale confirmation is the second, and a backend step-up before a high-value action is the third.

Agent-assisted verification is the clearest example of the value. The agent starts a request and watches it succeed, and nothing reusable passes in either direction. Presence is proven on the customer's own handset, to the identity provider rather than to the agent, so a recording of that call holds nothing worth stealing.

It is worth being equally clear about where the flow is the wrong choice.

04

Delivery modes, setup and pricing

Your client is registered for exactly one delivery mode, and the registration decides the behavior rather than a parameter on the request. Poll and ping both end with your service collecting tokens at the token endpoint; push delivers them to your notification endpoint and forbids polling entirely.

Everything else is the platform you already have. A backchannel client is registered in the same place as everything else, inside one tenant, next to your OIDC applications and SAML service providers. Enrollment carries across: somebody who can already complete a browser sign-in is ready for a decoupled one with no further setup, and the resulting tokens carry the same claims, including the permissions your own API enforces.

Nothing here is billed as a separate product, because this is one protocol surface of the same tenant. Pricing is the platform's: one dollar per user each month at list, a floor of 20 seats, and a trial that runs 30 days without a card.

Registered like any other client

It is granted scopes and gated by attached groups in exactly the way an OIDC application is, so there is no second administration model to learn.

Authorization does not change

A token minted through this flow carries the same permissions claim for the API you targeted, computed the same way, and your API enforces it exactly as it would after a redirect sign-in.

Request tokens for a specific API audience

The backchannel request accepts an audience in the same way the code flow does, so a decoupled approval can mint a token scoped to the specific API the action will hit.

05

Compare the details

The three delivery modes
ModePollingCallbackNotification token
pollYes, no faster than the interval you were givenNoneNot used
pingYes, once the callback says the request is readyNotify only, carrying no tokensRequired
pushNo, and a push client that polls is rejectedThe tokens are delivered to your endpointRequired

poll

Polling
Yes, no faster than the interval you were given
Callback
None
Notification token
Not used

ping

Polling
Yes, once the callback says the request is ready
Callback
Notify only, carrying no tokens
Notification token
Required

push

Polling
No, and a push client that polls is rejected
Callback
The tokens are delivered to your endpoint
Notification token
Required

06

Frequently asked questions

How does the person know a request is waiting?

SenseCrypt emails them the sign-in QR and also makes a best-effort push to their enrolled devices. Opening that QR in the Authenticator app is what proves control of the email address, and the on-device face check is the biometric factor.

Can someone be tricked into approving a request they did not start?

There is no approval button to press. The prompt opens a face ceremony, so the person is completing an authentication rather than confirming a notification. Send a binding message and the request is described in front of them, which makes a prompt that does not match what they are doing visible instead of reflexive.

Is CIBA phishing-resistant?

Phishing resistance is a property of the passkey method, through FIDO2/WebAuthn origin binding, and where you need that guarantee that is the method to require. What CIBA removes on its own is the shared secret: no password and no one-time code exists in the flow, so nothing can be read out over the phone or typed into a lookalike page. Phone sign-in also combines a live face check with a key bound to the enrolled device.

How long does a request stay open?

300 seconds by default for an enrolled-user sign-in, and you can ask for a different expiry within the server's bounds. The handle is single use: once a token response succeeds, or the window elapses, start a new request rather than retrying the old one.

What does a shared terminal need?

Nothing enrolled and no credential of its own. It starts the request and displays what it is told to display, because the authentication is happening on a phone in somebody's pocket. That is also why a terminal shared across a shift leaks nothing between the people who use it.

Can we use CIBA for machine-to-machine work?

No, and it would be the wrong tool. CIBA exists to pull a person into a decision. If no person needs to approve, use a client credentials grant instead.

Next step

Whether a decoupled flow fits depends on where the person is when the request opens, so the useful conversation starts with the terminal, call-center or step-up scenario you have in mind.