Как настроить авторизацию на телевизоре с использованием шестизначного кода?

Как можно технически реализовать процесс добавления устройств, таких как телевизоры, в аккаунты пользователей и авторизацию через телевизор с использованием шестизначного кода? Я рассматриваю вариант, подобный тому, что применяет YouTube, где телевизор отображает код, а пользователь вводит его с мобильного устройства или ПК. Однако у меня возникли сомнения относительно хранения кодов в таблице и определения соответствующего телевизора в случае одновременного добавления двумя разными пользователями. Также интересно, стоит ли рассмотреть альтернативный подход, при котором код отображается на мобильном устройстве, а вводится на телевизоре, несмотря на то, что это может показаться менее безопасным. Какой из этих способов был бы более эффективным с точки зрения безопасности и удобства?
  • 2 января 2025 г. 22:53
Ответы на вопрос 2
Настройка авторизации на телевизоре с использованием шестизначного кода — это распространённая и удобная практика, которая позволяет пользователям быстро и безопасно связывать свои устройства. Ниже я представлю основные шаги по реализации такого процесса, а также комментарии по поводу хранения кодов и альтернативных методов.

### Шаги для реализации процесса авторизации:

1. **Генерация шестизначного кода**: При инициации процесса входа на телевизоре система генерирует уникальный шестизначный код. Этот код должен быть однимразовым (или с ограниченным временем действия) для повышения безопасности.

2. **Отображение кода на телевизоре**: Создайте интерфейс на телевизоре, который будет отображать этот код и, возможно, ID устройства или название приложения.

3. **Связывание с аккаунтом через мобильное устройство**:
   - Пользователь открывает приложение или веб-сайт, вводит свой логин и пароль.
   - После успешного входа пользователь переходит к разделу связывания устройства (например, "Добавить телевизор").
   - Пользователь вводит шестизначный код, отображаемый на телевизоре.

4. **Проверка кода**:
   - Код и ID устройства отправляются на сервер, где система проверяет, соответствует ли код тому, который был сгенерирован для этого устройства.
   - Если проверка успешна, создайте сессию для пользователя на телевизоре.

### Хранение кодов:

1. **Таблица с кодами**:
   - Создайте таблицу для хранения кодов и состояния устройства (например, "ожидает", "использован" или "устарел"). Каждая запись должна содержать уникальный идентификатор устройства, код, время его создания и статус.
   - В случае одновременного добавления двух пользователей система может просто проверять статус кода и гарантировать, что код может быть использован только раз. Если один из пользователей использует код, он помечается как "использованный".

2. **Проверка времени**: Внедрение таймеров на код, чтобы он устаревал через определённое время (например, 5-10 минут) будет хорошей практикой. Это добавит дополнительный уровень безопасности.

### Альтернативный подход:

Вы упомянули альтернативный способ, при котором код отображается на мобильном устройстве и вводится на телевизоре. Этот вариант имеет свои плюсы и минусы:

- **Преимущества**:
  - Пользователь может быстрее ввести код, не отрывая глаз от телевизора.
  - Так как ввод происходит на телевизоре, это может казаться более привычным для некоторых пользователей.

- **Недостатки**:
  - Атака "человек посередине": потенциально кто-то мог бы наблюдать за тем, как вводится код на телевизоре.
  - Это также может быть менее интуитивно для пользователей, которые привыкли вводить коды или пароли на своих устройствах.

### Заключение:
Ваша идея с использованием шестизначного кода, отображаемого на телевизоре, а вводимого с мобильных устройств или ПК, является более удобной и безопасной реализацией. Этот подход позволяет минимизировать риски и упрощает процесс для пользователя. Выбор метода зависит от целевой аудитории и специфики приложения, но в целом предложенный процесс с учетом безопасности и удобства является наиболее оптимальным.
Или проще сделать наоборот: показывать код на мобильном устройстве, а на ТВ вводить?

Для пользователя проще вводить что-либо на телефоне, а не на телевизоре.

В общем-то такой способ входа не только на телевизорах и yt практикуется. Такое есть ещё у Microsoft и Github при использовании oauth, например. Ещё видел такое у samsung на телевизорах/мониторах и у nintendo на свиче

Смысл такой:
1. Клиент инициирует процесс аутентификации запросом к серверу аутентификации и просит, чтобы аутентификация происходила на другом клиенте. (при этом передаётся clientid / client secret просто чтобы понять, что за приложение этот запрос инициировало).

2. Сервер генерирует какой-то уникальный идентификатор для этого запроса с некоторым временем жизни (обычно не больше 30 минут). И передаёт его клиенту в ответе на запрос.

3. Клиент показывает пользователю:
1) qr-код с ссылкой для аутентификации, где уже зашит этот id
2) ссылку в виде текста
3) этот id, если вдруг его придётся вводить руками

4. Пользователь переходит в итоге по ссылке и опционально вводит этот id. Дальше идёт обычная oauth аутентификация, только без коллбэка (в конце, вместо коллбэка просто страничка аля "всё готово, страницу можно закрыть")

5. Параллельно с этим клиент в фоне опрашивает сервер аутентификации о том, прошла ли аутентификация (просто периодические запросы раз в n секунд, long polling, sse, websocket - не важно). В один прекрасный момент сервер сообщит, что аутентификация прошла и передаст твои обычные токены (обычно пару access/refresh)
Похожие вопросы