Aller au contenu
Documentation · TV et outils en ligne de commande

TV, consoles et outils en ligne de commande

Une TV peut difficilement afficher une page de connexion, et un outil en ligne de commande ne devrait pas demander de mot de passe. Avec le flux d’appareil, l’appareil affiche un code court, que la personne entre dans le Lobby de son environnement, sur son téléphone ou son ordinateur, où elle est déjà connectée.

Enregistrer l’app

Dans Usher Console, ouvrez l’environnement, puis Applications → Nouvelle application → TV ou ligne de commande. Elle reçoit un ID client mais aucun secret : un appareil ne pourrait pas le garder.

Le flux

Terminal
# 1. the device asks for a code
curl -s -X POST https://acme.usherid.com/api/auth/device/code \
  -d client_id=YOUR_CLIENT_ID -d scope='openid email offline_access'
# → { "device_code": "…", "user_code": "6L95PBQQ",
#     "verification_uri": "https://acme.usherid.com/device",
#     "verification_uri_complete": "https://acme.usherid.com/device?user_code=6L95PBQQ",
#     "expires_in": 600, "interval": 5 }

# 2. it shows the code (and a QR code of verification_uri_complete), then polls
curl -s -X POST https://acme.usherid.com/api/auth/oauth2/token \
  -d grant_type=urn:ietf:params:oauth:grant-type:device_code \
  -d device_code=… -d client_id=YOUR_CLIENT_ID
# → { "error": "authorization_pending" } until the person allows it,
#   then { "access_token": "…", "id_token": "…", "refresh_token": "…" }
  • Interrogez avec modération. Attendez interval secondes entre deux interrogations. Si vous interrogez plus vite, la réponse est slow_down.
  • Arrêtez-vous quand on vous le dit. access_denied signifie que la personne a refusé; expired_token signifie que dix minutes se sont écoulées. Demandez un nouveau code.
  • Affichez aussi l’adresse. Tout le monde ne peut pas scanner un code QR : affichez verification_uri et le code, espacé comme 6L95-PBQQ.

Sur /device, le Lobby montre à la personne quelle app fait la demande, et pour quoi faire. Il lui indique de ne poursuivre que si elle a elle-même lancé la demande et que son appareil affiche le même code.

Lier les jetons à l’appareil (DPoP)

Un jeton copié depuis un appareil reste un jeton valide. Avec DPoP (RFC 9449), l’appareil conserve une clé privée et envoie une nouvelle preuve signée avec chaque requête. Un jeton lié à cette clé est inutilisable sans elle.

  • Demandez des jetons liés : envoyez un en-tête DPoP avec vos requêtes de jeton, et Usher lie ce qu’il émet à votre clé (token_type vaut DPoP).
  • Exigez-les : activez Exiger DPoP lorsque vous créez l’app. Usher ne lui émet alors aucun jeton sans preuve.
  • Utilisez-les avec Authorization: DPoP <token>, accompagné d’une preuve pour cette requête.
  • Bibliothèques : la plupart des bibliothèques OAuth qui prennent en charge DPoP font tout cela pour vous (l’option DPoP d’openid-client, par exemple).