Что работает сегодня
Если на устройстве есть браузер или webview, поверхности различаются только тем, как инициатор
узнаёт о завершении: сам поток — тот же authorize → code → token. Если браузера нет, бэкенд
приложения создаёт подтверждение и обменивает его на
id_token пользователя — см.
Smart TV и поверхности без клавиатуры. Для устройства без собственного
бэкенда пути пока нет: полная реализация device flow сейчас в работе.Поверхности без удобного ввода
Именно здесь кросс-девайсность окупается сильнее всего. На телевизоре, приставке или киоске ввод пароля — это набор символов пультом; QR-код и подтверждение в телефоне снимают задачу целиком. Для таких поверхностей полезны две вещи:- живой статус — SignalR-хаб
/hubs/auth, а там, где WebSocket недоступен, опросGET /api/transaction/{id}/status; - контекст инициатора — в сообщении подтверждения человек видит, что именно он подтверждает. Для киоска и общего устройства это важнее, чем для личного ноутбука: см. Контекст инициатора.
Где инициатор — общее устройство
Киоск в офисе, терминал в зале, экран у входа: устройство общее, а подтверждает конкретный человек. Здесь стоит держать в голове две вещи. Транзакция принадлежит сеансу, а не устройству. Одноразовая кука между callback и authorize привязана к последней загрузке страницы входа: если страница перезагрузилась, подтверждение относится уже к другой транзакции, и Veriqa вернётbrowser_nonce_mismatch. Это защита от
подтверждения чужой сессии — подробности в Диагностике.
Показанный QR — секрет ровно на время транзакции. На общей поверхности имеет смысл сокращать
время жизни экрана входа и не оставлять код висеть после завершения.
Место как часть сценария
Привязка входа к физическому месту (QR на принтере или на выделенном экране в офисе) — предмет исследования, см. Место и личность.Что не зависит от поверхности
- набор каналов подтверждения — он про телефон пользователя, а не про инициатора;
- claims и их состав;
- требование к клиенту при входе через браузер: confidential-клиент с секретом либо public-клиент с PKCE S256. Server-to-server вход — только для confidential-клиента.