Gå til indholdet
Dokumentation · Tv og kommandolinjeværktøjer

Tv, konsoller og kommandolinjeværktøjer

Et tv kan ikke uden videre vise en loginside, og et kommandolinjeværktøj bør ikke bede om en adgangskode. Med device-flowet viser enheden en kort kode, og personen taster den ind i sit miljøs Lobby på sin telefon eller computer, hvor personen allerede er logget ind.

Registrer appen

Åbn miljøet i Usher Console, og vælg derefter Applikationer → Ny applikation → Tv eller kommandolinje. Appen får et klient-id og ingen hemmelighed: en enhed kan ikke holde på en.

Flowet

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": "…" }
  • Poll høfligt. Vent interval sekunder mellem hver polling. Poller du hurtigere, svares der slow_down.
  • Stop, når du får besked på det. access_denied betyder, at personen har afvist; expired_token betyder, at der er gået ti minutter. Bed om en ny kode.
  • Vis også adressen. Ikke alle kan scanne en QR-kode: vis verification_uri og koden med mellemrum som 6L95-PBQQ.

På /device viser Lobbyen personen, hvilken app der spørger, og om hvad. Den beder kun personen fortsætte, hvis personen selv har startet det, og enheden viser den samme kode.

Bind tokens til enheden (DPoP)

Et token, der er kopieret fra en enhed, er stadig et token. Med DPoP (RFC 9449) har enheden en privat nøgle og sender et nyt signeret bevis med hver anmodning. Et token, der er bundet til den nøgle, er ubrugeligt uden den.

  • Bed om bundne tokens: send en DPoP-header med dine tokenanmodninger, så binder Usher det, den udsteder, til din nøgle (token_type er DPoP).
  • Kræv dem: slå Kræv DPoP til, når du opretter appen. Så udsteder Usher ikke tokens til den uden et bevis.
  • Brug dem med Authorization: DPoP <token> plus et bevis for den pågældende anmodning.
  • Biblioteker: de fleste OAuth-biblioteker med DPoP-understøttelse klarer alt dette for dig (f.eks. openid-clients DPoP-indstilling).