用php写wifidog的认证服务器
程序员文章站
2022-05-24 11:16:25
...
路由器上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.首先是重定向,在首次登陆时,用户访问的url会被重定向到如下的地址:
/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;$iquery($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 =portal login