Telewizory, konsole i narzędzia wiersza poleceń
Telewizor nie wyświetli wygodnie strony logowania, a narzędzie wiersza poleceń nie powinno prosić o hasło. W przepływie kodu urządzenia urządzenie pokazuje krótki kod, a dana osoba wpisuje go w Lobby środowiska na telefonie lub komputerze, na którym ma już aktywną sesję.
Zarejestruj aplikację
W Usher Console otwórz środowisko, a następnie wybierz Aplikacje → Nowa aplikacja → Telewizor lub wiersz poleceń. Aplikacja dostaje identyfikator klienta, ale nie dostaje sekretu: urządzenie nie jest w stanie go bezpiecznie przechować.
Przepływ
# 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": "…" }- Odpytuj z umiarem. Między kolejnymi zapytaniami odczekaj
intervalsekund. Na szybsze odpytywanie serwer odpowiadaslow_down. - Przestań, gdy trzeba.
access_deniedoznacza, że dana osoba odmówiła;expired_tokenoznacza, że minęło dziesięć minut. Poproś o nowy kod. - Pokaż też adres. Nie każdy może zeskanować kod QR: pokaż
verification_urii kod podzielony na części, na przykład6L95-PBQQ.
Pod adresem /device Lobby pokazuje, która aplikacja prosi o dostęp i do czego. Radzi kontynuować tylko wtedy, gdy logowanie rozpoczęła ta sama osoba, a jej urządzenie pokazuje ten sam kod.
Powiąż tokeny z urządzeniem (DPoP)
Token skopiowany z urządzenia nadal jest tokenem. Dzięki DPoP (RFC 9449) urządzenie przechowuje klucz prywatny i przy każdym żądaniu wysyła świeży, podpisany dowód. Token powiązany z tym kluczem jest bez niego bezużyteczny.
- Poproś o powiązane tokeny: wysyłaj nagłówek
DPoPw żądaniach tokenów, a Usher powiąże wydawane tokeny z Twoim kluczem (token_typema wartośćDPoP). - Wymagaj ich: podczas tworzenia aplikacji włącz opcję Wymagaj DPoP. Usher nie wyda jej wtedy żadnego tokenu bez dowodu.
- Używaj ich z nagłówkiem
Authorization: DPoP <token>oraz dowodem dla danego żądania. - Biblioteki: większość bibliotek OAuth obsługujących DPoP zrobi to wszystko za Ciebie (na przykład opcja
DPoPwopenid-client).