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
# 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
intervalsekunder mellem hver polling. Poller du hurtigere, svares derslow_down. - Stop, når du får besked på det.
access_deniedbetyder, at personen har afvist;expired_tokenbetyder, at der er gået ti minutter. Bed om en ny kode. - Vis også adressen. Ikke alle kan scanne en QR-kode: vis
verification_uriog koden med mellemrum som6L95-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_typeerDPoP). - 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-clientsDPoP-indstilling).