Начиная с версии 1.6.3231 WNAM поддерживает идентификацию (авторизацию) пользователей Wi-Fi при помощи учетной записи (идентификатора) Яндекс.
Внимание! Данный способ идентификации формально не входит в список, обозначенный в требованиях законодательства. Однако ваша организация на свой страх и риск может допустить применение данного способа.
Авторизация через Яндекс ID функционирует так же, как и с любой другой, использующей OAuth2 метод системой, например порталом "Госуслуги". Общая схема взаимодействия такова:
- Администратор системы WNAM получает все необходимые токены доступа к Яндекс ID.
- Администратор системы WNAM настраивает безусловный доступ к серверам Яндекс ID для абонентов на стадии "до авторизации".
- Подключившийся не идентифицированный Wi-Fi абонент переводится на сервера Яндекс ID для проведения авторизации (логин/пароль/СМС/QR код и т.п.).
- По завершении авторизации сессия абонента возвращается на WNAM для показа реклами и т.п., и последующего допуска в Интернет.
- Параллельно при этом WNAM, пользуясь переданным токеном, запрашивает у серверов Яндекс данные по пользователю.
Для настройки этого метода вам необходимо выполнить следующие шаги.
1. Создание "приложения". Перейдите на https://oauth.yandex.ru, авторизуйтесь, нажмите на "+ создать приложение". Укажите название, доступ к трем параметрам:
• Доступ к дате рождения
• Доступ к адресу электронной почты
• Доступ к логину, имени и фамилии, полу
2. Укажите адрес возврата в WNAM в виде ссылок /wnam/yandex_auth и /cp/social/yandex:
http://172.16.130.5:8080/wnam/yandex_auth
http://172.16.130.5:8080/cp/social/yandex
(здесь вы должны указать полные имена или адреса сервера WNAM, с указанием портов, так чтобы пользователь Wi-Fi имел к ним доступ; ориентируйтесь на тот формат, который у вас применяется при настройке редиректа на портал WNAM).
3. Получите ClientID и Client secret:
4. В настройке вашего хотспота (роутер Микротик, параметр free-rule, ACL на контроллере БЛВС) разрешите доступ к ресурсам серверов Яндекс, доступным до окончания авторизации абонента, там где вы разрешали его достуцп до самого сервера WNAM. Вы должны добавить доступы до следующих ресурсов:
- oauth.yandex.ru порт 443
- passport.yandex.ru порт 443
Например:
Если ваш хотспот не умеет работать с DNS-именами, значит вам придется вручную выяснить, какие IP адреса скрываются за этими именами у вас, вписать в ACL/правило эти адреса или их подсеть, и поддерживать эти правила актуальными в дальнейшем.
5. Настройте интеграцию WNAM и Яндекс ID. Перейдите в раздел "Конфигурация - Внешние OAuth системы", вкладка "Yandex", и укажите в ней ключи приложения и URL возврата:
6. Попробуйте выполнить тестовый запрос, для чего перейдите по ссылке http://адрес_вашего_сервера/wnam/auth_test , и нажмите там "Auth in Yandex". Если все настроено верно, вас отправит на страницу авторизации Яндекса, а затем вернет на WNAM, показав данные авторизованного пользователя.
Также в лог-файле wnam.log вы увидите:
17:19:06.408 DEBUG [AuthController.java:358] - Request yandex code 4769692
17:19:06.597 DEBUG [YandexService.java:140] - Yandex token Token{accessToken='...', expires=31536000, tokenType='bearer', refreshToken='1:...', error='null', errorDescription='null'}
17:19:06.663 INFO [YandexService.java:152] - Response: {"id": "...", "login": "...", "client_id": "...", "display_name": "...", "real_name": "...", "first_name": "...", "last_name": "...", "sex": null, "default_email": "...", "emails": ["..."], "birthday": "...", "psuid": "..."}
17:19:06.700 DEBUG [YandexService.java:156] - Response: YaUser{name='...', sex='null', realName='...', id=..., bdate='...', email='...'}
Если тестовый запрос успешен, можно настраивать гостевую авторизацию.
7. Авторизация через Яндекс ID совместима с любым "основным" методом авторизации (СМС, звонок, ваучер, гостиничная система). Для её включения необходимо лишь разместить дополнительную кнопку на странице любого существующего и используемого у вас метода. Для этого в "Конструкторе страниц" нужной страницы необходимо включить один чекбокс. Больше ничего настраивать не требуется.
8. Успешно авторизованный по Яндекс ID абонент виден в таблице пользователей со всеми полученными его учетными данными: