Вход через OAuth
HandyCafe поддерживает социальный/OAuth-вход для клиентов с использованием Device Authorization Grant (RFC 8628). Этот метод разработан для киосковых и публичных сред, где клиенты не могут безопасно вводить учетные данные на общих ПК.
Поддерживаемые провайдеры
| Провайдер | Эндпоинт |
|---|---|
| oauth2.googleapis.com | |
| graph.facebook.com/v21.0 | |
| Apple | appleid.apple.com |
| X (Twitter) | api.x.com/2/oauth2 |
| Discord | discord.com/api/oauth2 |
Каждый провайдер может быть включен или отключен индивидуально в Настройки > OAuth.
Процесс аутентификации
Процесс авторизации устройства проходит следующие шаги:
- Клиент выбирает провайдера - на экране ожидания клиент нажимает кнопку провайдера (например, Google, Discord).
- Клиент отправляет запрос на сервер - клиент уведомляет HandyCafe Server о начале OAuth-входа.
- Сервер запрашивает код устройства - сервер обращается к эндпоинту авторизации устройства выбранного провайдера и получает код устройства, пользовательский код и URI верификации.
- Клиент отображает код - клиент показывает
user_codeиverification_uri, обычно в виде QR-кода для удобного сканирования. - Клиент аутентифицируется на телефоне - клиент сканирует QR-код личным устройством (телефоном или планшетом) и завершает аутентификацию на сайте провайдера.
- Сервер опрашивает токен - сервер периодически запрашивает у провайдера токен. Состояния опроса:
- Pending - клиент еще не завершил аутентификацию.
- SlowDown - слишком частый опрос; сервер снижает частоту.
- Success - аутентификация завершена; токен получен.
- Expired - код устройства истек до аутентификации.
- Error - произошла непредвиденная ошибка.
- Сервер получает информацию о пользователе - при успехе сервер использует токен для получения профиля клиента от провайдера:
provider_uid,email,nameиavatar_url. - Администратор одобряет или отклоняет - запрос на вход появляется на странице "Запросы". Администратор или кассир рассматривает и одобряет или отклоняет запрос.
- Создание или привязка участника - при одобрении создается новый аккаунт участника или OAuth-профиль привязывается к существующему.
- Запуск сессии клиента - клиент получает подтверждение и сессия начинается.
Безопасность
- Учетные данные не вводятся на общем ПК. Клиенты аутентифицируются только на личных устройствах. Никакие пароли или токены не вводятся на клиентской машине.
- Контроль администратора. Каждый OAuth-запрос на вход должен быть одобрен администратором или кассиром перед запуском сессии, предотвращая несанкционированный доступ.
- Настраиваемое требование баланса. Параметр "разрешить вход без баланса" можно включить или отключить, контролируя необходимость положительного баланса для входа через OAuth.
Конфигурация
OAuth-провайдеры настраиваются в Настройки > OAuth. Каждый провайдер требует собственных клиентских учетных данных (client ID и client secret), полученных из консоли разработчика провайдера. Включайте только те провайдеры, которые хотите предложить клиентам.