前言
最近一直在做路由器认证相关的工作。 由于需求的原因,认证过程与通常的Web认证略有不同。 于是,我开始尝试自己写一个认证服务器。 在查阅了一些中外资料后,我总结一下我的经验。
原则
下图是从wiki网站截取的认证流程图。 单击该 URL 可打开链接。
它由两部分组成,一是运行在路由器上的程序,二是运行在认证服务器上的程序。
认证流程大致如下:
1、首先用户终端可以连接wifi,然后发起访问网站的请求,如;
2、网关根据防火墙规则将用户的请求重定向到本地端口(监听端口);
3、网关将用户的访问重定向到认证服务器上的认证页面;
4、认证服务器返回登录页面给用户;
5. 然后用户向认证服务器提供凭据,例如用户名和密码;
6、认证服务器根据用户提供的凭据判断用户是否符合要求,可以访问互联网;
7、如果满足要求,认证服务器将用户的访问重定向到路由器网关,并携带标识令牌;
8、网关向认证服务器确认用户信息;
9、如果满足要求,服务器返回登录成功页面给用户;
10. 用户可以访问互联网。
安装和配置
我的路由器型号是:TP-LINK TL-941N V4/V5版本。
安装的内容是: ---tl--v4-- (首先是 flash ---tl--v4-- )。
我先安装了luci,然后找到了这个路由器的版本的下载地址,然后安装了(由于这个路由器的FLASH只有4M,安装完luci后无法安装,所以我又刷新了系统,只安装了,然后通过putty ssh工具访问路由器。)。
第一次访问路由器时,可以使用该工具,然后设置路由器的密码,然后就可以通过ssh访问了。
配置如下:
GatewayID default
GatewayInterface br-lan
GatewayAddress 192.168.1.1
ExternalInterface br-lan
AuthServer{
Hostname justyoung.com(也可以是域名)
SSLAvailable no
HTTPPort 8080(默认是80)
Path /wifidog/(文件名的两边都要加‘/’号,除非是根目录,只要一个‘/’)
LoginScriptPathFragment login.php/? (这里把第一次登陆时重定向的位置也修改了,加了一个后缀,默认是login/?,) PingScriptPathFragment ping.php/?
PortalScriptPathFragment portal.html?
AuthScriptPathFragment auth.php/?
...
}可以有多个AuthServer,Wifidog会从第一个往后找,直到找到可用的认证服务器为止。
这段代码首先根据mac地址判断登录的用户是否合法。 如果合法则直接重定向到192.168.1.1:2060//auth?token=XXX。 如果非法,则重定向到欢迎页面并引导用户获取身份验证。 。
与互动
这里特别提一下。 我发现网站上有两个版本的opkg,所以请根据自己的需求确定opkg的来源。 一个是2009年版本,另一个是2013年版本。 我用的源码就是这个源码的版本。 是的,他们在登录时是有区别的,后面会提到。
首先介绍一下与Auth服务器的交互协议:
1.首先是重定向。 首次登录时,用户访问的URL将被重定向到以下地址:
登录/?=%s&=%d&gw_id=%s&url=%s(2009版)
登录/?=%s&=%d&gw_id=%s&mac=%s&url=%s(2013版)
这里有一个版本问题,就是2009版本在重定向时不会在链接中带上mac参数,但是2013版本会,所以这里需要根据自己的应用特别注意。 当用户第一次连接路由器时,访问的URL将被定向到登录页面,并带有上述参数。 我们可以利用这些参数来生成token或者进行其他判断。 通常的情况是登录时返回wifi认证方式给用户,比如带有用户名和密码的登录页面等。
2、用户认证协议:
:/auth/auth.php?stage=%s&ip=%s&mac=%s&token=%s&=%s&=%s
一般情况下,认证服务器会根据用户输入的信息生成token,然后将用户重定向到监听端口。 该端口默认地址为:192.168.1.1:2060//auth?token=%s,得到这个token后,发送到认证服务器进行认证。 如果认证通过,则返回“Auth: 1”。 如果认证失败,则返回“Auth: 0”。 具体参数如下。
0 - - 用户 users 是且用户 .6 - ED - 用户电子邮件有且 user/ 是 - - 用户有效,如果无效则添加规则 - - 用户到电子邮件以获取规则-1 下的电子邮件 - - 错误
认证服务器通过获取上述链接的参数即可判断用户是否合法。 该链接是认证服务器用来判断首次登录的用户是否合法以及连接的用户是否可以继续访问该链接的方法。 每隔一段时间就会向认证服务器发送信息,即通过上面所示的链接发送信息。 通过这些参数,可以看到客户的上传流量、下载流量、mac地址、ip地址、token和、ip和stage。 stage可能有两个参数,即或者login。 首次登录验证时stage=login,其他时候stage=。
3.Ping协议
%s&=%lu&=%u&=%.2f&=%lu
一些信息将被发送到认证服务器以报告当前情况。 该信息通过Http协议发送。 如上面的链接所示,参数可能与字面意思一样。 我没有仔细研究过它们。 作为认证服务器,它应该以“Pong”响应。
4、认证成功后跳转
/?gw_id=%s
身份验证成功后,用户将被重定向到此页面。
5. 如果验证失败,您将根据失败原因跳转至以下页面。
.php?=
.php?=
.php?=
注意,根据我对.conf的配置,执行login时,相当于重定向到链接等,其他执行的链接也是如此。
编写自己的身份验证服务器
这次我使用php来编写服务器,因为它更容易。
1.首先是login.php
2.ping.php
这里没有进行任何额外的处理,只是简单地返回一个Pong。
3.auth.php
这里我们根据一些参数获取$来决定是否允许认证。
4..php和.html就不一一列出了。
总结
暑假期间做了一个微信wifi认证项目。 我在工作中总结了这些经验。 虽然不难,但是也需要一段时间。 主要难点在于协议的理解、路由器的选择、操作系统的安装以及安装和配置。 。