Uni-Fi авторизация проходит через скрипт сgi-bin/guest/s/default/index.cgi
В настройках Uni-Fi выставить тип авторизации: External guest portal, и прописать адрес билинга.
В скрипте index.cgi есть 3 основные функции:
unifiLogin() - Вход в API
getJson() - Получение данных из контролера
sendJson() - Отправка команды
unifiLogout() - Выход из API
Авторизация клиента проходит в несколько стадий:
Неавторизированый клиент перенаправляется на guest/s/default/index.cgi, с GET параметрами, которые обрабатываются скриптом.
Со страницы пользователя отправляется запрос на Uni-Fi контроллер для получения статуса клиента. В зависимости от статуса, пользователю показывается форма логина или статус. Если MAC адреса клиента нет в списке, полученном от контролера, выводится надпись «You have to be redirected via hotspot».
При получении скриптом формы авторизации, отсылается запрос в билинг.
Если пользователю можно ходить в интернет, скрипт отправляет на Uni-Fi команду для авторизации пользователя.
Пользователю показывает данные статистики и ссылку на URL, куда он хотел попасть и кнопку «Отключить».
Подробное описание
В билинге есть сервер доступа Uni-fi. Там и в config.pl прописаны параметры соединения с сервером.
Поскольку сам Uni-fi ничего на билинг не отправляет, billd опрашивает Uni-fi каждые 5 минут (плагин ubiquiti_online.pm, период можно поменять в настройках плагинов billd) клиент подключается к точке. Через некоторое время (от 2 секунд) клиент появится в списке клиентов на контроллере. Когда клиент заходит в интернет (или когда ОС проверит наличие интернета), его отредиректит на портал указанный в настройках Uni-fi.
Авторизация
Тут вступает index.cgi портала. По маку, который пришёл в запросе, он в списке клиентов на контроллере находит нужного и сверяет статус клиента.
Дальше, в зависимости от статуса:
неавторизован - показывает форму логина
авторизован - показывает форму статуса (там где сначала колёсико крутится)
не нашёл MAC - отвечает, что нет такого клиента на контроллере.
Когда пользователь вводит свой логин и пароль - на сервер, скриптом страницы, асинхронно отправляется запрос на авторизацию, формируется внутренний запрос к Dv.
В ответе Dv при успешной авторизации возвращаются параметры таймаута сесии и скорости.
С этих параметров, формируется запрос на Uni-fi для авторизации пользователя на точке.
Если аторизация успешная, скрипт страницы после отображения сообщения, покажет таблицу статуса и запросит дополнительные даные для отображения клиенту. На этой же странице находится кнопка «Отключить», для самостоятельного завершения сесии клиентом.
Для удобности, в верхней части страницы - линк на страницу, куда направлялся пользователь.
Аккаунтинг и продолжительность сесии
Поскольку сам Uni-fi ничего не отправляет, то обновление данных происходит только, когда выполняется billd.
Billd опрашивает Uni-fi, и по макам клиентов, определяет к какой учетной записи они принадлежат и добавляет время.
Продолжительность сессии подсчитывается только когда сессия закончится, поэтому billd не скидывает абонентов.
Абонентов скидывает сам Uni-fi по таймауту сессии. При повторной авторизации, биллинг сверит данные из пользовательского онлайна и если времени онлайна больше, чем позволено для тарифного плана, закончит сессию, и отдаст негативный результат авторизации.
Добавляем сервер доступа в ABillS
Настройка>Сервера доступа
IP | IP Адрес точки |
---|---|
Тип | Uni-fi |
Alive | Время обновления статистики и подтверждения активности сессии. Рекомендуемое значение 300 |
MAC | МAC точки доступа. Если не указать МAC система не будет видеть к какой точке авторизировался абонент в журнале последних подключений (Отчёт>Интернет>Последнее подключение) |
Radius-Identifier | |
:Управление: | |
IP:PORT: | IP адрес и порт для контролера (по умолчанию 8443) |
Пользователь: | admin Имя пользователя для контроля |
Пароль: | Секретный ключ |