Hoppa till innehållet
Dokumentation · TV-apparater och kommandoradsverktyg

TV-apparater, konsoler och kommandoradsverktyg

En TV kan inte gärna visa en inloggningssida, och ett kommandoradsverktyg bör inte be om ett lösenord. Med enhetsflödet visar enheten en kort kod, och man skriver in den i miljöns Lobby på sin telefon eller dator, där man redan är inloggad.

Registrera appen

Öppna miljön i Usher Console och välj sedan Appar → Ny app → TV eller kommandorad. Appen får ett klient-ID men ingen hemlighet: en enhet kan inte hålla en hemlighet hemlig.

Flödet

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": "…" }
  • Fråga artigt. Vänta interval sekunder mellan förfrågningarna. Om du frågar oftare blir svaret slow_down.
  • Sluta när du blir ombedd. access_denied betyder att personen sa nej; expired_token betyder att tio minuter har gått. Be om en ny kod.
  • Visa adressen också. Alla kan inte skanna en QR-kod: visa verification_uri och koden, uppdelad som 6L95-PBQQ.

På /device visar Lobbyn personen vilken app som frågar och vad den ber om. Lobbyn uppmanar personen att bara fortsätta om det var personen själv som startade inloggningen och enheten visar samma kod.

Bind tokens till enheten (DPoP)

En token som har kopierats från en enhet är fortfarande en token. Med DPoP (RFC 9449) har enheten en privat nyckel och skickar ett nytt signerat bevis med varje förfrågan. En token som är bunden till den nyckeln är oanvändbar utan den.

  • Be om bundna tokens: skicka en DPoP-rubrik med dina tokenförfrågningar, så binder Usher det som utfärdas till din nyckel (token_type är DPoP).
  • Kräv dem: slå på Kräv DPoP när du skapar appen. Usher utfärdar då ingen token till den utan ett bevis.
  • Använd dem med Authorization: DPoP <token>, plus ett bevis för just den förfrågan.
  • Bibliotek: de flesta OAuth-bibliotek med stöd för DPoP gör allt detta åt dig (till exempel alternativet DPoP i openid-client).