RE: WISRp и UAM средствами nginx
Лапочкин Константин
kostenl at gmail.com
Wed Oct 23 10:07:21 UTC 2013
Ссылку, которую вы прислали посмотрел, там скорее клиентская часть. Из дампа микротика не увидел ничего особенного при редиректе. Вот что там происходит:
Вначале запрос ссылки и редирект
GET /library/test/success.html HTTP/1.0
Host: www.apple.com
User-Agent: CaptiveNetworkSupport-200.1 wispr
Connection: close
HTTP/1.1 302 Hotspot login required
Cache-Control: no-cache
Content-Length: 135
Content-Type: text/html
Date: Fri, 11 Oct 2013 06:37:38 GMT
Expires: 0
Location: http://10.0.2.1/login?dst=http%3A%2F%2Fwww.apple.com%2Flibrary%2Ftest%2Fsuccess.html
<html>
<head><title>Error 302: Hotspot login required</title></head>
<body>
<h1>Error 302: Hotspot login required</h1>
</body>
</html>
Потом отдаётся страница авторизации
GET /login?dst=http%3A%2F%2Fwww.apple.com%2Flibrary%2Ftest%2Fsuccess.html HTTP/1.0
Host: 10.0.2.1
User-Agent: CaptiveNetworkSupport-200.1 wispr
Connection: close
HTTP/1.0 200 OK
Cache-Control: no-cache
Connection: close
Content-Length: 3223
Content-Type: text/html
Date: Fri, 11 Oct 2013 06:37:38 GMT
Expires: 0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>internet hotspot > login</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="-1" />
<style type="text/css">
body {color: #737373; font-size: 10px; font-family: verdana;}
textarea,input,select {
background-color: #FDFBFB;
border: 1px solid #BBBBBB;
padding: 2px;
margin: 1px;
font-size: 14px;
color: #808080;
}
a, a:link, a:visited, a:active { color: #AAAAAA; text-decoration: none; font-size: 10px; }
a:hover { border-bottom: 1px dotted #c1c1c1; color: #AAAAAA; }
img {border: none;}
td { font-size: 14px; color: #7A7A7A; }
</style>
</head>
<body>
.<form name="sendin" action="http://10.0.2.1/login" method="post">
..<input type="hidden" name="username" />
..<input type="hidden" name="password" />
..<input type="hidden" name="dst" value="http://www.apple.com/library/test/success.html" />
..<input type="hidden" name="popup" value="true" />
.</form>
.
.<script type="text/javascript" src="/md5.js"></script>
.<script type="text/javascript">
.<!--
. function doLogin() {
..document.sendin.username.value = document.login.username.value;
..document.sendin.password.value = hexMD5('\234' + document.login.password.value + '\127\323\323\064\231\042\112\004\377\300\213\003\116\227\123\000');
..document.sendin.submit();
..return false;
. }
.//-->
.</script>
<div align="center">
<a href="http://10.0.2.1/login?target=lv&dst=http%3A%2F%2Fwww.apple.com%2Flibrary%2Ftest%2Fsuccess.html">Latviski</a>
</div>
<table width="100%" style="margin-top: 10%;">
.<tr>
.<td align="center" valign="middle">
..<div class="notice" style="color: #c1c1c1; font-size: 9px">Please log on to use the internet hotspot service<br /></div><br />
..<table width="280" height="280" style="border: 1px solid #cccccc; padding: 0px;" cellpadding="0" cellspacing="0">
...<tr>
....<td align="center" valign="bottom" height="175" colspan="2">
.....<form name="login" action="http://10.0.2.1/login" method="post"
..... onSubmit="return doLogin()" >
......<input type="hidden" name="dst" value="http://www.apple.com/library/test/success.html" />
......<input type="hidden" name="popup" value="true" />
......
.......<table width="100" style="background-color: #ffffff">
........<tr><td align="right">login</td>
..........<td><input style="width: 80px" name="username" type="text" value=""/></td>
........</tr>
........<tr><td align="right">password</td>
..........<td><input style="width: 80px" name="password" type="password"/></td>
........</tr>
........<tr><td> </td>
..........<td><input type="submit" value="OK" /></td>
........</tr>
.......</table>
.....</form>
....</td>
...</tr>
...<tr><td align="center"><a href="http://www.mikrotik.com" target="_blank" style="border: none;"><img src="img/logobottom.png" alt="mikrotik" /></a></td></tr>
..</table>
.
.<br /><div style="color: #c1c1c1; font-size: 9px">Powered by MikroTik RouterOS</div>
.
.</td>
.</tr>
</table>
<script type="text/javascript">
<!--
document.login.username.focus();
//-->
</script>
</body>
</html>
-----Original Message-----
From: nginx-ru-bounces at nginx.org [mailto:nginx-ru-bounces at nginx.org] On Behalf Of Maxim Dounin
Sent: Friday, October 18, 2013 7:23 PM
To: nginx-ru at nginx.org
Subject: Re: WISRp и UAM средствами nginx
Hello!
On Fri, Oct 18, 2013 at 03:28:46PM +0600, Лапочкин Константин wrote:
> Добрый день. Используем Nginx для редиректа на captive-портав с наших
> wifi-hotspot’ов. Пользователь, подключившись к не защищённой сети при
> любом обращении в интернет по протоколам http, https перенаправляется
> на наш портал, где проходит авторизацию (либо получает гостевой
> доступ). Возникла задача:
> что бы на клиентских устройствах с iOS (iPhone, iPad) при подключении
> к нашей сети всплывало pop-UP окно с нашим порталом.
> Работает это через протокол wisrp, окно называется uam(unified
> authorization method). Суть метода в том, что при подключении к сети
> ios запрашивает ссылку с «User-Agent:
> CaptiveNetworkSupport-200.1 wispr». Если он получает на это 302, то,
> теоретически, должно возникнуть окошко со страницей, на которую
> перенаправляет 302-й код. Однако, это в nginx не работает. Проверяли,
> что работает на microtik. Cнимали дамп пакетов c микротика, увидели
> следующее:
[...]
> Что сделал: пробовал через nc слать заголовки из дампа микротика –
> работает, окно появляется. Пересобрал ngnix, что бы заменить
> 302 Moved Temporarily на 302 Hotspot login required – не помогло.
Если я правильно понимаю, важно не то, как делается перенаправление, а то, что возвращается клиенту после перенаправления.
Там должна быть XML'ка установленного спецификацией WISPr вида, пример можно посмотреть, например, тут:
http://hotspot-connect.sourceforge.net/
--
Maxim Dounin
http://nginx.org/en/donation.html
_______________________________________________
nginx-ru mailing list
nginx-ru at nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Подробная информация о списке рассылки nginx-ru