Телевизори, конзоли и инструменти за команден ред
Телевизорът трудно може да покаже страница за вход, а инструмент за команден ред не бива да иска парола. С потока за устройства устройството показва кратък код, а човекът го въвежда в Lobby на средата от телефона или компютъра си, където вече е влязъл.
Регистрирайте приложението
В Usher Console отворете средата, след това Приложения → Ново приложение → Телевизор или команден ред. Приложението получава ID на клиента без секрет: устройството не може да го пази.
Потокът
# 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": "…" }- Питайте с мярка. Изчаквайте
intervalсекунди между заявките. На по-честите заявки се отговаря съсslow_down. - Спрете, когато ви кажат.
access_deniedозначава, че човекът е отказал;expired_tokenозначава, че са минали десет минути. Поискайте нов код. - Показвайте и адреса. Не всеки може да сканира QR код: показвайте
verification_uriи кода, разделен като6L95-PBQQ.
На /device Lobby показва на човека кое приложение пита и за какво. Казва му да продължи само ако сам е започнал процеса и устройството му показва същия код.
Обвържете токените с устройството (DPoP)
Токен, копиран от устройство, си остава токен. С DPoP (RFC 9449) устройството пази частен ключ и изпраща ново подписано доказателство с всяка заявка. Токен, обвързан с този ключ, е безполезен без него.
- Поискайте обвързани токени: изпращайте заглавка
DPoPсъс заявките си за токени и Usher обвързва издаденото с вашия ключ (token_typeеDPoP). - Изисквайте ги: включете Изискване на DPoP, когато създавате приложението. Тогава Usher не му издава нито един токен без доказателство.
- Използвайте ги с
Authorization: DPoP <token>, плюс доказателство за съответната заявка. - Библиотеки: повечето OAuth библиотеки с поддръжка на DPoP правят всичко това вместо вас (например опцията
DPoPнаopenid-client).