Aller au contenu

Connexion par QR

La connexion par QR permet à un navigateur de se connecter en scannant un QR code avec l’app Bloonio Authenticator. Le tenant agit comme courtier : il initie une session (signé HMAC #1), affiche le QR à l’utilisateur, puis interroge le relais jusqu’à approbation. Les deux routes sont des relais vers auth_api, qui mint le QR et décide de l’issue.

  1. Le navigateur demande une connexion ; votre backend appelle POST /relay/qr-login/initiate avec l’origine du navigateur.
  2. Le relais vérifie que l’origine est dans l’allowlist du tenant, puis renvoie session_id, poll_token et la charge du QR.
  3. Le front-end affiche le QR. L’utilisateur le scanne et approuve dans l’app.
  4. Le navigateur interroge GET /relay/qr-login/poll jusqu’à un état approuvé ou un 410 GONE.

browser_origin doit appartenir à qr_login_allowed_origins du tenant. Une allowlist vide désactive la connexion par QR pour ce tenant.

Fenêtre de terminal
curl $BASE_URL/api/v1/relay/qr-login/initiate \
-X POST \
-H "X-Bloonio-Tenant-Id: tnt_..." \
-H "X-Bloonio-Timestamp: 1718966400000" \
-H "X-Bloonio-Signature: <hex_hmac_sha256>" \
-H "Content-Type: application/json" \
-d '{ "browser_origin": "https://example.com" }'
{
"success": true,
"status_code": 200,
"message": "QR-login session created.",
"data": {
"session_id": "...",
"poll_token": "...",
"qr_payload": "...",
"qr_code_str": "...",
"signature": "...",
"expires": "2026-06-21T..."
}
}

L’interrogation est un pass-through : transmettez la requête de poll de l’utilisateur avec l’en-tête X-QR-Poll-Token. Le relais reflète le code de statut d’auth_api.

Fenêtre de terminal
curl "$BASE_URL/api/v1/relay/qr-login/poll?session_id=..." \
-H "X-Bloonio-Tenant-Id: tnt_..." \
-H "X-Bloonio-Timestamp: 1718966400000" \
-H "X-Bloonio-Signature: <hex_hmac_sha256>" \
-H "X-QR-Poll-Token: ..."

session_id fait de 10 à 64 caractères.

CodeSignification
200En attente ou approuvé — le bloc data reflète l’état renvoyé par auth_api.
410 GONELe QR a expiré, a été consommé, ou le poll-token est absent / invalide.
502auth_api en amont injoignable.