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

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

Телевизору непросто показать страницу входа, а инструменту командной строки не стоит спрашивать пароль. В потоке для устройств устройство показывает короткий код, а человек вводит его в 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 показывает человеку, какое приложение запрашивает доступ и к чему. Lobby советует продолжать, только если человек сам начал вход и на его устройстве показан тот же код.

Привязка токенов к устройству (DPoP)

Токен, скопированный с устройства, по-прежнему остается токеном. С DPoP (RFC 9449) устройство хранит закрытый ключ и с каждым запросом отправляет новое подписанное доказательство. Токен, привязанный к этому ключу, без него бесполезен.

  • Запрашивайте привязанные токены: отправляйте заголовок DPoP с запросами токенов, и Usher привяжет выданное к вашему ключу (token_type будет DPoP).
  • Требуйте их: включите Требовать DPoP при создании приложения. Тогда Usher не выдаст ему ни одного токена без доказательства.
  • Используйте их с Authorization: DPoP <token> и доказательством для этого запроса.
  • Библиотеки: большинство библиотек OAuth с поддержкой DPoP делают все это за вас (например, параметр DPoP в openid-client).