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

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

Телевізору важко показати сторінку входу, а інструмент командного рядка не має запитувати пароль. У потоці для пристроїв пристрій показує короткий код, а людина вводить його в 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).