咱们去大多数机场或者一些公共场合的时候,会看到不少公共的WIFI热点须要进行手机号的短信认证登陆,那么咱们如何去构造这样一个系统呢?微信
这里介绍一种技术——wifidog,其提供了一套这样的解决方案,适用于openwrt和ddwrt,其包括了两个部分路由端须要安装的插件,以及一个提供的基于XMPP的web解决方案,我看了下以为若是使用它提供的web解决方案的话,很是不方便,由于这样的技术通常只要弄清楚其通讯的机制和协议就能够了,因此在文档中找到了其通讯的协议,以后我会加以说明其相关的协议。网络
具体的原理是怎样?又是如何实现的。tcp
首先咱们须要一个能够进行命令行管理操做的路由器,好比刷过相似于openwrt或者ddwrt这种系统的路由器,这样的一个系统相似于一个小的Linux系统,若是咱们能够进行命令行的控制,那么咱们就能够安装一系列的软件了,这里咱们经过给路由器安装wifidog,实现构建这样一个WIFI认证的系统。那么wifidog是如何实现整个过程的呢?ide
简单来说就是路由层会将全部的用户mac地址进行一个名单的控制,因此在未登陆认证以前,而后wifidog能够配置一个登陆受权的服务器地址,用户不在白名单列表里,就会被重定向到这个网址。post
通常来说,其实全部的网络访问应该都是不能够的,可是借助于iptables的管理,路由器能够设定一些ip以及相关协议(tcp, udp)的白名单,因此对于认证过程当中可能设计到网页,包括中间须要网络请求提交的地址(例如新浪或者QQ等第三方的登陆受权)都须要加入到访问网络地址的白名单里面。这样能够保证用户基本的网络访问权限的限制吗,可是同时又不影响网络的受权。spa
当用户被重定向到了认证的网页以后,剩下的操做就在认证服务器端进行了,但须要保证的是,由于如今用户的基本网络访问权限是被限制住的,因此中间全部涉及到的网络请求地址都须要按照上面说的给加入到白名单里面,不然由于一些请求发送不出去,因此不能完成认证。插件
对于认证的过程,根据上述的描述,由于认证操做都在认证服务器端,因此能够保证认证过程是很是灵活。就好比说 咱们常见的是短信验证码的认证,除此以外,咱们能够用新浪微博登陆,微信添加账号,动态密码,豆瓣人人登陆等等,由于通常第三方登陆都是基于XOAuth或者OAuth2.0认证,因此通常都是无非有一个登陆的地址,而后一个回调的地址,可是须要注意的是,第三方登陆页面会有一些JS或者CSS资源之类的,这些资源可能不在同域下面,而一些图片显示,最重要登陆验证提交都是在JS里面,因此也须要抓包分析一下地址,进行路由器的配置白名单。
如今不少人可能有疑问是,认证操做是在服务器端进行的,那么认证经过后,认证服务器是如何告知路由器用户已经经过受权呢?
其实由于用户此时在内网,因此wifidog的解决方案是,在内网的一个ip地址开了一个端口(通常是2620),接受HTTP的请求,因此认证服务器认证成功以后须要给用户生成一个惟一的token标识,而后重定向到这个http请求地址并带上参数便可。
而后路由器这边接受到了请求以后,就会认为这个用户(实际判断是mac地址)能够进行网络访问,可是呢,实际上也不会这么直接开放用户网络权限,由于通常来讲咱们用CMCC的话是否是会看到用户已经上网的时长呢,因此这里wifidog也提供了一个用户的控制,具体是怎样的呢?
就是在用户认证成功以后,路由器不是获得了用户的token吗,而后token和mac以及ip能够构成惟一,因此路由器会周期性地把这三个值以及链接信息(其余参数)一块儿发给认证服务器,认证服务器经过返回值来断定该用户当前的状态,好比是能够继续网络访问呢,仍是拒绝,仍是验证失败,仍是出错等等,来控制用户的访问权限。
例如实现三个小时剔除用户的话,就能够从用户认证经过开始计时,若是超过三小时,当路由器三小时后周期性发来验证信息的时候,能够返回拒绝,而后用户就会被踢下线。
整个逻辑也就是: 用户认证服务器经过后,会重定向到路由器的http认证地址,路由器获取用户的token,开始对其进行周期性的验证,由认证服务器对其进行鉴权。
有的时候由于须要判断路由器这边的认证受权控制是否正常工做,因此路由器会一直对认证服务器进行心跳包的发送,可让认证服务器监控到路由器是否正常工做。
以上就是借助wifidog的原理,对WIFI认证登陆控制的整个限制的过程分析,这里主要是基于wifidog v1的协议和原理。 欢迎多多交流。
本文章由 http://www.wifidog.pro/2015/02/11/wifidog-cmcc.html 整理编辑,转载请注明出处