Как настроить вход через OAuth
Это руководство проведет вас через настройку социального входа, позволяющего клиентам авторизовываться на клиентских ПК с помощью аккаунтов Google, Facebook, Apple, X или Discord. HandyCafe использует поток Device Authorization Grant (RFC 8628), предназначенный для устройств без полноценного браузера. Клиенты сканируют QR-код телефоном для аутентификации.
Что вам понадобится
- Доступ администратора к HandyCafe Server.
- Аккаунт Google Cloud Console (для Google OAuth) или аналогичный доступ к порталу разработчика другого провайдера.
- HandyCafe Server запущен и доступен в вашей сети.
- Хотя бы один подключенный клиентский ПК для тестирования.
Как работает Device Flow OAuth в HandyCafe
Краткое описание процесса:
- Клиент на незанятом ПК нажимает кнопку социального входа (например, «Войти через Google»).
- Клиент отправляет запрос на начало OAuth серверу.
- Сервер обращается к эндпоинту авторизации устройства провайдера и получает код устройства, пользовательский код и URL для верификации.
- На экране клиента отображается QR-код и пользовательский код.
- Клиент сканирует QR-код телефоном и проходит аутентификацию у провайдера.
- Сервер опрашивает провайдера до завершения аутентификации.
- Сервер создает запрос на вход OAuth, отображаемый на странице Запросы.
- Администратор или кассир подтверждает запрос.
- Создается новый аккаунт участника (или привязывается существующий) и клиент авторизуется.
Как настроить Google OAuth
Google является наиболее распространенным провайдером. Этот раздел охватывает все шаги от создания проекта Google Cloud до тестирования первого входа.
Часть A: создание учетных данных Google Cloud
- Откройте Google Cloud Console по адресу https://console.cloud.google.com в браузере.
- Создайте новый проект или выберите существующий. Назовите его, например «HandyCafe OAuth».
- Перейдите в APIs & Services > OAuth consent screen.
- Выберите External как тип пользователей (если у вас нет организации Google Workspace для внутреннего использования).
- Заполните обязательные поля: App name («Название вашего кафе»), User support email, Developer contact email.
- Нажимайте Save and Continue через разделы Scopes и Test Users. Специальные scopes не нужны. Стандартных email и profile достаточно.
- Перейдите в APIs & Services > Credentials.
- Нажмите Create Credentials > OAuth client ID.
- Для Application type выберите TVs and Limited Input devices. Это критически важно. HandyCafe использует поток device authorization grant, требующий именно этот тип клиента.
- Введите имя клиента (например, «HandyCafe Device Flow»).
- Нажмите Create.
- Скопируйте Client ID и Client Secret из диалога подтверждения. Сохраните их в надежном месте.
Часть B: настройка HandyCafe Server
- Откройте приложение HandyCafe Server.
- Перейдите в Настройки через значок шестеренки в боковом меню.
- Выберите вкладку OAuth.
- Включите переключатель OAuth вверху страницы. Это глобально активирует социальный вход на всех клиентских ПК.
- Найдите строку провайдера Google в списке.
- Включите переключатель Google.
- Вставьте Client ID из шага 12 в поле Client ID.
- Вставьте Client Secret из шага 12 в поле Client Secret.
- Нажмите Сохранить.
Ожидаемый результат: вкладка OAuth показывает Google как включенный провайдер с заполненными учетными данными. Настройки отправляются на все подключенные клиенты.
Часть C: тестирование процесса входа
- Перейдите к подключенному клиентскому ПК. Экран ожидания должен показывать раздел социального входа с кнопкой Google.
- Нажмите кнопку Google на экране ожидания клиента.
- На клиенте отображается QR-код и пользовательский код (короткая буквенно-цифровая строка).
- Отсканируйте QR-код телефоном. Откроется страница верификации устройства Google.
- Войдите в аккаунт Google и введите пользовательский код.
- Авторизуйте приложение.
Ожидаемый результат: на сервере воспроизводится звук уведомления и появляется новая запись на странице Запросов. Запрос показывает имя аккаунта Google, email и клиентский ПК, инициировавший вход.
Как подтвердить запрос на вход
Каждый вход через OAuth генерирует запрос, который должен быть подтвержден до предоставления доступа.
- При поступлении запроса на сервере воспроизводится звук уведомления и появляется бейдж на иконке страницы Запросов.
- Перейдите на страницу Запросы.
- Ожидающий запрос показывает:
- Имя провайдера (например, Google).
- Отображаемое имя от провайдера (например, «Иван Петров»).
- Email (например, «ivan@example.com»).
- Клиентский ПК, инициировавший запрос.
- Временную метку.
- Проверьте данные запроса. Убедитесь, что человек за клиентским ПК соответствует информации аккаунта.
- Нажмите Подтвердить для принятия запроса.
Ожидаемый результат: если не существует аккаунта участника, привязанного к этому OAuth-идентификатору, новый аккаунт создается автоматически. Используются отображаемое имя и email от провайдера. Клиент авторизуется и ПК переходит с экрана ожидания на рабочий стол.
Совет: при подозрительном запросе (ПК без присмотра, запрос выглядит автоматическим) нажмите Отклонить. Клиент увидит сообщение «Доступ запрещен» и может повторить попытку.
Как настроить Facebook OAuth
- Откройте Facebook Developer Portal по адресу https://developers.facebook.com .
- Создайте новое приложение. Выберите тип Consumer.
- Перейдите в Settings > Basic. Запишите App ID и App Secret.
- Перейдите в Add Product и добавьте Facebook Login for Devices.
- В настройках Facebook Login for Devices добавьте redirect URI при необходимости.
- Откройте HandyCafe Server и перейдите в Настройки > OAuth.
- Найдите строку провайдера Facebook.
- Включите переключатель Facebook.
- Вставьте App ID в поле Client ID.
- Вставьте App Secret в поле Client Secret.
- Нажмите Сохранить.
Ожидаемый результат: Facebook отображается как включенный провайдер. На экранах ожидания клиентов появляется кнопка входа через Facebook.
Как настроить Discord OAuth
- Откройте Discord Developer Portal по адресу https://discord.com/developers/applications .
- Создайте новое приложение. Назовите его по имени кафе.
- Перейдите в раздел OAuth2 в боковом меню.
- Скопируйте Client ID и сгенерируйте Client Secret. Сохраните секрет надежно, Discord показывает его только один раз.
- Откройте HandyCafe Server и перейдите в Настройки > OAuth.
- Найдите строку провайдера Discord (по умолчанию отключен).
- Включите переключатель Discord.
- Вставьте Client ID в поле Client ID.
- Вставьте Client Secret в поле Client Secret.
- Нажмите Сохранить.
Ожидаемый результат: Discord теперь доступен как вариант входа на экранах ожидания клиентов.
Типичные ошибки
- Неверный тип OAuth-клиента в Google Cloud Console. Необходимо выбрать «TVs and Limited Input devices» при создании OAuth client ID. Выбор «Web application» или «Desktop app» не даст работать потоку device authorization, и клиент не получит код устройства.
- Не включен главный переключатель OAuth. Включение отдельных провайдеров недостаточно. Главный переключатель OAuth вверху страницы настроек OAuth тоже должен быть включен.
- Неподтвержденные запросы на вход. Входы через OAuth требуют явного подтверждения с сервера. Если никто не следит за страницей Запросов, клиенты будут ждать бесконечно на экране ожидания. Назначьте кассира для мониторинга запросов в часы пик.
- Истечение срока кодов устройств. Коды устройств имеют ограниченный срок (обычно 5-10 минут). Если клиент медлит со сканированием QR-кода и аутентификацией, код истекает и нужно начать заново. Рекомендуйте клиентам сканировать быстро.
- Лишние пробелы в учетных данных. При копировании Client ID или Client Secret из консоли провайдера убедитесь в отсутствии начальных или конечных пробелов. Лишние пробелы вызовут ошибки аутентификации.
- Не опубликовано OAuth-приложение Google. Приложения Google в режиме «Testing» допускают только ограниченное число тестовых пользователей. Для входа любого клиента опубликуйте приложение через OAuth consent screen.
- Не настроено название кафе. Название из настроек HandyCafe отображается на клиентском экране ожидания в процессе OAuth. Пустое или стандартное название выглядит непрофессионально. Задайте название кафе в Настройки > Общие до включения OAuth.