Поведение iOS Captive Network Assistant в точках доступа

У нас есть точка доступа, использующая метод аутентификации по SMS. Пользователь выбирает нашу сеть WiFi Hotspot и перенаправляется на нашу страницу входа.

На iOS и Android активируется всплывающее окно Captive Portal, показывающее нашу страницу входа. Мы просим пользователей заполнить форму и указать свой номер телефона. Когда они нажимают «Отправить», мы отправляем им SMS с кодом подтверждения.

Окно входа в систему (размещенное на нашем сервере) меняется на новую страницу, на которой отображается поле для ввода кода подтверждения. Пока все хорошо... Если пользователь видит «всплывающее окно с уведомлением» для SMS на своем экране поверх закрытого окна, он может увидеть код, ввести его в указанное поле и аутентифицироваться.

Но если у него нет настроенного SMS-уведомления, ему нужно зайти в свое приложение для SMS и найти код. Теперь единственный способ сделать это — закрыть всплывающее окно Captive, но тогда он отключится от нашей точки доступа. Если он снова подключается, ему нужно снова заполнить форму и получить новое SMS, но он сталкивается с той же проблемой.

Теперь все это время пользователь не аутентифицирован, поэтому в iOS в привязном окне в правом верхнем углу отображается «Отмена». Я видел этот же метод на других горячих точках, но в первом окне Captive элемент управления, отображаемый в правом верхнем углу, «Готово». Насколько я знаю, разница в том, что элемент управления «Готово» отображается, когда пользователь аутентифицирован, и «Отмена», пока он еще не аутентифицирован.

Есть ли способ «обмануть» CNA, чтобы он «думал», что у пользователя есть доступ в Интернет, и отображал «Готово», чтобы при закрытии Captive-окна устройство оставалось подключенным к нашей точке доступа?

Мы думаем о какой-то «двухэтапной» аутентификации, например, временной (чтобы получить «Готово»), а затем «настоящей» после ввода кода подтверждения.

Другой способ может состоять в том, чтобы использовать какой-то скрипт (например, трюк «Успех» на iOS), чтобы обмануть CNA, заставив его думать, что есть доступ в Интернет. Но где и как применить «Фокус успеха»? На некоторых HTML-страницах роутера? Или где-то в коде нашей страницы входа?


person teledot    schedule 02.01.2018    source источник


Ответы (1)


Разные версии ОС и разные платформы проверяют доступ в Интернет по-разному. iOS, например, ищет один из них:

http://captive.apple.com/hotspot-detect.html

http://captive.apple.com

и т.п.

Android использует (среди прочего):

http://clients3.google.com/generate_204

Лучшее решение для вашего авторизованного портала — разрешить доступ к ним через брандмауэр. Если вы используете фильтрацию по MAC-адресам через ipfw или iptables, это несложно. Если вы делаете подделку DNS, это сложнее — для таких случаев я бы просто включил страницы «успеха» в ваш пакет портала авторизации.

person David S.    schedule 02.01.2018
comment
Привет Дэвид, и спасибо за ваш ответ. Как вы собираетесь включать страницы успеха в свой пакет авторизованного портала? Для первоначального всплывающего окна CNA мне нужно заблокировать успех. Оказавшись на странице входа в систему, пользователь должен выбрать способ входа (электронная почта, смс и т. д.). Затем открывается новая страница с формой для заполнения. Я мог бы что-то сделать на второй странице, но все эти закрытые страницы размещены на моем сервере RADIUS. Повлияет ли это на поведение клиента? Как я могу передать успех клиенту, если он не инициировал запрос с помощью GET....? - person teledot; 04.01.2018
comment
Запустите MITM на клиенте, чтобы посмотреть поведение, если вам интересно. При согласовании с новой конечной точкой WI-FI клиент постоянно пытается попасть на тестовый URL-адрес. Когда он возвращает HTTP 200, он предполагает, что подключение к Интернету установлено. Когда вы будете готовы к тому, чтобы клиент изменил отмену, измените ответ на эти URL-адреса для этого устройства на HTTP 200. - person David S.; 09.01.2018
comment
Недавно я обнаружил кое-что интересное об устройствах Android примерно с v4.3 (kit-kat) по крайней мере до v7. Они также запрашивают у сервера имен Google IP-адрес домена для своего generate_204. Поэтому, если вы хотите, чтобы помощник по подключению работал, вам нужно не только ответить на запрос generate_204 перенаправлением HTTP, но и перехватить DNS-запрос на 8.8.8.8 (или 8.8.4.4). - person Scott; 15.03.2019
comment
К вашему сведению, помощник по подключению — это всплывающее окно, которое предлагает пользователю открыть браузер, чтобы войти в сеть или иным образом прочитать/одобрить какое-либо лицензионное соглашение. - person Scott; 15.03.2019