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
# 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
intervalsekunder mellan förfrågningarna. Om du frågar oftare blir svaretslow_down. - Sluta när du blir ombedd.
access_deniedbetyder att personen sa nej;expired_tokenbetyder att tio minuter har gått. Be om en ny kod. - Visa adressen också. Alla kan inte skanna en QR-kod: visa
verification_urioch koden, uppdelad som6L95-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ärDPoP). - 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
DPoPiopenid-client).