Lion Cipher Lab

Authenticate a user out-of-band with OIDC CIBA

Why it matters

Imagine phoning your bank. The agent needs to prove it's really you before discussing your account — but you must NEVER read your password or a one-time code to a stranger on a phone line, and the agent's screen must never touch your credentials. CIBA — Client-Initiated Backchannel Authentication, an OpenID Connect extension — is how that's done properly: the agent's app (the Relying Party) starts an authentication in the background, and a push notification lands on YOUR phone asking 'Approve login for your account?'. You approve on your own trusted device, and the agent's screen simply…

What you'll learn

Steps in this lab

  1. When you'd reach for CIBA — and when you must not
  2. Start a real authorization server: Keycloak in Docker
  3. Create a realm and a user who will approve on a second device
  4. Register a CONFIDENTIAL CIBA client in poll mode
  5. Discover the backchannel_authentication_endpoint
  6. Act as the RP: start the backchannel authentication request
  7. Act as the user: approve out-of-band on the second device
  8. Act as the RP again: poll the token endpoint for the result
  9. Decode the id_token to prove who was authenticated
  10. The sharp edges: binding_message, delivery modes, and CIBA vs the rest

Open the full interactive lab →