Към съдържанието
Документация · Телевизори и инструменти за команден ред

Телевизори, конзоли и инструменти за команден ред

Телевизорът трудно може да покаже страница за вход, а инструмент за команден ред не бива да иска парола. С потока за устройства устройството показва кратък код, а човекът го въвежда в 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).