资讯专栏INFORMATION COLUMN

用php写wifidog的认证服务器

tunny / 1049人阅读

摘要:主要作用是路由确认认证服务器仍然存活,没有死机,另外一个功能是认证服务器可以收集路由的负载等的信息。路由器会定时访问这个脚本,脚本必须回复,否则将认为认证服务器失效而出错。

路由器上wifidog的设置

主要设置鉴权服务器主机名(域名或ip都可以)和加粗鉴权服务器路径

路由器会请求以下四个地址:

http://认证服务器/路径/login
http://认证服务器/路径/auth
http://认证服务器/路径/ping
http://认证服务器/路径/portal
http://认证服务器/路径/gw_message.php

所以我们需要每个请求建立一个文件夹下一个index.php

预备知识

客户端首次连接wifi,浏览器请求将被重定向到login并携带参数

login/?gw_address=路由器ip&gw_port=路由器wifidog的端口&gw_id=用户id&url=被重定向前用户浏览的地址

(2013版本的wifidog参数多了mac)

而login/index.php需要做的就是验证通过后再重定向到网关:

http://网关地址:网关端口/wifidog/auth?token=

之后wifidog会启动一个线程周期性报告用户状态:

/auth?stage=&ip=&mac=&token=&incoming=&outgoing=

/auth/index.php则需要返回是否让该用户继续上网,回复格式:Auth:状态码(0:拒绝, 1:验证通过)

验证成功后,路由器将请求/portal/?gw_id=%s

在/portal/index.php就可以写重定向到第一次请求的url参数或者重定向到自定义网址了

/ping/index.php的作用就是告诉路由器认证服务器还没有崩
/gw_message/index.php作用是当认证过程出现错误的时候,想用户显示错误信息

开工

我们将完成用户用账号密码方式认证

1.首次重定向:

/login/index.php

query("set names "utf8"");
    $result = $db->query("SELECT * FROM user WHERE username="{$username}" AND password="{$password}"");
    if($result && $result->num_rows != 0){
        //数据库验证成功
        $token = "";
        $pattern="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLOMNOPQRSTUVWXYZ";
        for($i=0;$i<32;$i++)
            $token .= $pattern[ rand(0,35) ];
        //把token放到数据库,用于后续验证(auth/index.php)
        $time = time();
        $sql = "UPDATE user SET token="{$token}",logintime="{$time}"";
        $db->query($sql);
        $db->close();
        //登陆成功,跳转到路由网管指定的页面.
        $url = "http://{$parseUrl["gw_address"]}:{$parseUrl["gw_port"]}/wifidog/auth?token={$token}";
        header("Location: ".$url);
    }else{
        //认证失败
        //直接重定向本页 请求变成get
        $url="http://".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
        header("Location: ".$url);
    }
}else{
    //get请求
    //一个简单的表单页面
    $html = <<< EOD
    
        
            portal login
        
        
            
username: password:
EOD; echo $html; }
2.用户认证协议:

/auth/?stage=%s&ip=%s&mac=%s&token=%s&incoming=%s&outgoing=%s
参数解释:
stage: 认证阶段,就logoin和counters两种
token: login页面下发的token
incoming: 下载流量
outgoing: 上传流量

/auth/index.php

query("set names "utf8"");
$token = $parseUrl["token"];
$sql = "SELECT * FROM user WHERE token="{$token}"";
$result = $db->query($sql);
if($result && $result->num_rows != 0){
    //token匹配,验证通过
    echo "Auth:1";
}else{
    echo "Auth:0";
}

3.Ping协议

/ping/?gw_id=%s&sys_uptime=%lu&sys_memfree=%u&sys_load=%.2f&wifidog_uptime=%lu

wifidog会向认证服务器发送一些信息,来报告wifidog现在的情况,这些信息是通过Http协议发送的,如上的链接所示,参数大概如字面意思,没仔细研究过,而作为认证服务器,auth_server应回应一个"Pong"。
主要作用是路由确认认证服务器仍然存活,没有死机,另外一个功能是认证服务器可以收集路由的负载等的信息。路由器会定时访问这个脚本,脚本必须回复Pong,否则将认为认证服务器失效而出错。

/ping/index.php

4.认证成功后的跳转

portal/?gw_id=%s

在认证成功后,wifidog会将用户重定向至该页面。

/portal/index.php


5.若验证失败,则会根据失败原因跳转至如下页面

gw_message.php?message=denied

gw_message.php?message=activate

gw_message.php?message=failed_validation

/gw_message.php

总结

wifidog的认证流程是:

用户连上wifi,发起一个访问网站的请求,如:segmentfault.com

网关根据防火墙规则,将请求重定向本地(路由器的ip)的wifidog端口

wifidog重定向到认证服务器的认证页面

认证服务器返回登录页面让用户填写

用户填写后请求认证

认证服务器根据用户提供数据确定是否符合要求

如果符合要求,认证服务器将用户重定向路由器网关并携带token

网关向认证服务器确定用户信息

如果符合要求,服务器返回用户登录成功的页面

用户正常上网

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21157.html

相关文章

  • 服务端和web端分离架构下使 passport 进行前后台户各自认证

    摘要:服务端和端分离架构下使用进行前后台用户各自的认证前段时间大概一年以前写了个项目使用了前后端代码分离的架构,同时又因为业务需要出现了管理端和前台商户端两套用户表登陆的需求。 服务端和web端分离架构下使用 passport 进行前后台用户各自的认证 前段时间(大概一年以前)写了个项目使用了前后端代码分离的架构,同时又因为业务需要出现了管理端和前台商户端两套用户表登陆的需求。 因为使用了 ...

    luffyZh 评论0 收藏0
  • PHP中使CURL,“撩”务器只需几行——php curl详细解析和常见大坑

    摘要:七夕啦,作为开发,妹子没得撩就撩下服务器吧,妹子有得撩的同学那就左拥妹子右抱服务器吧,况且妹子是要礼物的,服务器又不用。下面我们来看一些常用的情景,我们需要如何打扮自己配置参数才能正确撩妹正确撩到服务器。 七夕啦,作为开发,妹子没得撩就撩下服务器吧,妹子有得撩的同学那就左拥妹子右抱服务器吧,况且妹子是要礼物的,服务器又不用。好啦,长话短说再长说,祭出今天的工具——CURL(Client...

    SexySix 评论0 收藏0
  • Limesurvey二次开发(接入CAS统一身份认证)随笔

    摘要:在我开发之前只看见上海交通大学完成了自己的二次开发,并且接入了自己学校的统一身份认证系统,除此之外,南京大学也打算做这个东西,然而过去了两年,好像还是没有完成开发。具体的实现可以参照上海交通大学的问卷吧系统。 Limesurvey是一个比较著名的开源问卷调查项目,GitHub地址:https://github.com/LimeSurvey/LimeSurvey 但由于种种原因,虽然用搜...

    Cympros 评论0 收藏0
  • 自建网站对接微信公众号

    摘要:自建网站对接微信公众号微信公众号技术平常我们有些写各种网站个人博客系统物流管理系统通信录管理系统校园二手网站我们都知道只需要租用一个服务器再配置一个备案好的域名就可以在浏览器上进行访问了不知大家不知大家有没有想过将你搭的网站对接微信公众 title: 自建网站对接微信公众号date: 2018-04-12 15:25tags: 微信公众号, PHP codeigniter cat...

    mylxsw 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<