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