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