Skip to main content
Your app runs on a TV, a kiosk or a device with nothing to type on. You want the user to sign in with a QR code on the screen and confirm the sign-in in a messenger on their phone.
If the device has a browser or a webview, a regular sign-in works — see the Passwordless sign-in for a web app recipe. Below is the path without a browser.

What you need

  • a Veriqa server with a channel enabled;
  • a backend for the app: the client secret cannot be stored on the device, because it can be extracted from the app;
  • room on the screen for the QR code with the “Powered by Veriqa” strip under it.

Steps

1

Create a separate client for the device

The client needs AllowClientCredentials, AllowConfirmationTokenGrant, openid in AllowedScopes and a declared action type with the message text — Configure the client.
2

Create a confirmation from the backend

POST /api/transaction/confirmation returns a channel_entry with the QR image and the link — Create the confirmation.
3

Show the QR code on the screen

The app displays the qr image with any TV SDK; no browser is needed — What exists today.
4

Wait for the outcome

The backend polls GET /api/transaction/{id}/result until the outcome is no longer pending — Read the outcome.
5

Open the session

The backend exchanges the confirmed transaction for an id_token, stores the sub and opens its own session on the device — Linking from your server.

How to check

Start a sign-in on the device, scan the QR code with your phone and confirm in the messenger. The backend should receive the confirmed outcome and, after the exchange, an id_token with the sub of whoever confirmed. There is no refresh_token on this path: the transaction is redeemed once, and the app itself keeps the long-lived session on the device.

Next steps