Outils pour utilisateurs

🇫🇷 Français | 🇬🇧 English


CIBA Flow (Client Initiated Backchannel Authentication)

Objective

The CIBA flow allows user authentication to be triggered without redirecting the user to the LINLP authentication screen.

👉 It is used to:

  • trigger a validation request on the mobile device
  • authenticate an already known user
  • perform strong validation (e.g. payment, sensitive action)

Principle

Unlike the standard flow:

  • no browser redirection
  • the request is initiated server-side
  • validation happens directly on the smartphone

👉 The server triggers a request → the user validates on their phone.


Prerequisites

⚠️ This flow requires the user to be known:

  • LINLP technical identifier (`sub`)
  • or QR code generated from the LINLP application

👉 This identifier is generally obtained during a first login through the Authorization Code flow.


Step 1: Triggering the request

Backend call:

POST /ext/ciba/auth

Parameters:

  • client_id
  • client_secret
  • scope
  • login_hint

Example:

grant_type=client_credentials
client_id=XXX
client_secret=XXX
scope=openid
login_hint=LIN|user_id

Response:

{
  "auth_req_id": "ABC123",
  "expires_in": 900,
  "interval": 5
}

Step 2: User validation

The user receives a notification on their smartphone:

  • authentication request
  • validation through secret PIN code

Step 3: Token retrieval

The backend polls LINLP:

POST /token

Parameters:

  • grant_type=urn:openid:params:grant-type:ciba
  • auth_req_id
  • client_id
  • client_secret

👉 This request is repeated until validation is completed.


Step 4: Data retrieval

Once validated:

  • tokens are returned
  • `/userinfo` can be called

Use Cases

The CIBA flow is suitable for:

  • validation of a sensitive transaction (payment, signature)
  • authentication without a web journey
  • background identity confirmation

Examples:

  • bank transfer approval
  • confirmation of a critical action
  • mobile-first journeys

Error Cases

Case Description
Unknown user login_hint error
Expired request invalid auth_req_id
User refusal no token returned
Invalid client_secret authentication error

Best Practices

⚠️ Always handle polling Respect the `interval` field to avoid overload.

⚠️ Handle expirations `auth_req_id` expires quickly.

⚠️ User experience Inform the user that a mobile validation is expected.

⚠️ Security Never expose `client_secret`.


Differences with Authorization Code

Criteria Authorization Code CIBA
User redirection Yes No
Initiated by Frontend Backend
User knowledge required Not mandatory Mandatory
Main use case Strong authentication Strong authentication

Points of Attention

⚠️ Flow requiring a known user Use only when the user identifier is already known by the service.

⚠️ Real-time handling Implement timeout and retry logic on the backend.


Summary

  • Flow without redirection
  • Backend-driven
  • Ideal for strong validation
  • Complementary to the standard flow

Next Step

👉 Understand returned data:

Scopes and Claims

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

Plus d’informations