ubnt解决方案
查看: 12222|回复: 37

[个人实战] [附源码]用PHP开发的企业Wifi网络Web认证系统

[复制链接]

774

回帖

6099

积分

1305 小时

在线时间

中校

技术达人

注册时间
2011-4-12
金币
4969 个
威望
21 个
荣誉
3 个
累计签到:32 天
连续签到:0 天
[LV.50]初入江湖
发表于 2012-5-16 21:41 |显示全部楼层
本帖最后由 tiida2011 于 2012-6-20 14:07 编辑

本案是为客户的合作单位开发的无线网络的网页认证系统。
本系统实现基于Web的Windows Active Directory用户验证(域用户验证)与数据库用户验证,调用Wiwiz Auth API实现Web认证。

无线网络为客户现有环境,每层一个无线路由器接到交换机,以前用WPA,现改为Web网页认证方式。
网络结构经小幅改动,Web认证网关采用Wiwiz虚拟机。
认证页面程序使用PHP + MySQL,调用Wiwiz Auth API接口。

该公司有数百员工,网络使用方面规定较严格。多数员工只能上内网,少部分员工有使用外网的权限(客户OA系统中登记备案)。
MySQL数据库为客户的OA系统数据库。

有外网使用权限的员工可以使用公司的Windows域账户或者OA系统的账户登录并认证。
重要客户来访时接待人员还可以通过程序后台申请授权码。

认证页效果请参考下图(已隐去客户LOGO与名称):



【最新更新】
源码共享


index.php
  1. <?php
  2. //****************************************************
  3. // Gets incoming parameters
  4. //****************************************************

  5. $pTokencode = $_REQUEST["tokencode"];        // incoming parameter "tokencode"
  6. $pSrvurl = $_REQUEST["srvurl"];                // incoming parameter "srvurl"

  7. session_start();
  8. if($pTokencode != null)
  9.         $_SESSION['tokencode'] = $pTokencode;
  10. if($pSrvurl != null)
  11.         $_SESSION['srvurl'] = $pSrvurl;
  12. ?>

  13. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
  14. <html>
  15. <head>
  16. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  17. <meta http-equiv="Content-Language" content="zh">
  18. <meta http-equiv="Pragma" content="no-cache">
  19. <meta http-equiv="Cache-Control" content="no-cache">

  20. <title>Wifi Portal</title>
  21. <script>
  22. function onLogin1() {
  23.        
  24.         if(document.getElementById("AuthType0").checked == false && document.getElementById("AuthType1").checked == false) {
  25.                 alert("请选择“使用OA系统账户登录”或“使用域账号登录”。");
  26.                 return false;               
  27.         }
  28.                
  29.         if(document.getElementById("agree1").checked == false) {
  30.                 alert("认证前您需要阅读并认同公司《计算机及网络使用管理规定》。");
  31.                 return false;
  32.         }
  33.        
  34.         return true;
  35. }

  36. function onLogin2() {
  37.         if(document.getElementById("agree2").checked == false) {
  38.                 alert("认证前您需要阅读并认同《访客使用网络协议》。");
  39.                 return false;
  40.         }
  41.        
  42.         return true;
  43. }
  44. </script>

  45. </head>

  46. <body>
  47. <form action="auth.php" method="post">

  48. <center>
  49. <br>
  50. <font style="font-size:22px" color="red">
  51. <b>XXX公司WiFi认证系统</font>
  52. <br><br>

  53. <font style="font-size:14px">
  54. 本公司、子公司及合作单位员工请使用OA系统账户或域账户进行认证
  55. <br>
  56. (仅限开通使用Internet权限的员工)
  57. <br><br>
  58. 访客请使用授权码进行认证
  59. </font></b>

  60. <br>
  61. <br>

  62. <table width="760">
  63. <tr>
  64. <td width="60%">

  65. <table width="90%" height="340" border="0" cellspacing="1" cellpadding="5" bgcolor="#cccccc" style="font-size: 12px">
  66. <tr bgcolor="#eef1ff">
  67. <td align=center>

  68. <b><font style="font-size:14px">员工通道</b></font>


  69. <table style="font-size:12px">
  70. <tr>
  71. <td colspan=2>

  72. <br>
  73. <input type="radio" name="AuthType" id="AuthType0" value="0" /> <label for="AuthType0">使用OA系统账户登录</label>
  74. </td>
  75. </tr>

  76. <tr>
  77. <td>
  78. 工号:
  79. </td>
  80. <td>
  81. <input type="text" name="StaffId" />
  82. </td>
  83. </tr>

  84. <tr>
  85. <td>
  86. 密码:
  87. </td>
  88. <td>
  89. <input type="password" name="Pswd" />
  90. </td>
  91. </tr>

  92. <tr>
  93. <td colspan=2>
  94. <input type="radio" name="AuthType" id="AuthType1" value="1" /> <label for="AuthType1">使用域账号登录</label>
  95. </td>
  96. </tr>

  97. <tr>
  98. <td>
  99. 所在域:
  100. </td>
  101. <td>
  102. <select name="Domain">
  103. <option value="MD">MD</option>
  104. <option value="Marketing">Marketing</option>
  105. </select>
  106. </td>
  107. </tr>

  108. <tr>
  109. <td>
  110. 域账户名:
  111. </td>
  112. <td>
  113. <input type="text" name="DomainUser" />
  114. </td>
  115. </tr>

  116. <tr>
  117. <td>
  118. 密码:
  119. </td>
  120. <td>
  121. <input type="password" name="DomainPswd" />
  122. </td>
  123. </tr>

  124. </table>

  125. <br>
  126. <input type="checkbox" name="agree1" id="agree1"><label for="agree1">我已阅读公司《<a href="http://172.23.1.16/hr/docs/k/12_doc.htm">计算机及网络使用管理规定</a>》</label>
  127. <br><br>
  128. <input type="submit" value="  登录 / 认证  " name="login1" onclick="return onLogin1();" />

  129. </td>
  130. </tr>
  131. </table>

  132. </td>

  133. <td width="40%">

  134. <table width="90%" height="340" border="0" cellspacing="1" cellpadding="8" bgcolor="#cccccc" style="font-size: 12px">
  135. <tr bgcolor="#eef1ff">
  136. <td>
  137. <center>
  138. <b><font style="font-size:14px">访客通道</b></font>
  139. <br><br>

  140. <table style="font-size:12px">
  141. <tr>
  142. <td colspan=2>

  143. <center> 访客请使用授权码进行认证 <br><br>
  144. </td>
  145. </tr>

  146. <tr>
  147. <td>

  148. 授权码:
  149. </td>
  150. <td>
  151. <input type="text" style="width:100px" name="AuthCode" />

  152. </td>
  153. </tr>


  154. </td>
  155. </tr>
  156. </table>

  157. <br>
  158. <input type="checkbox" name="agree2" id="agree2"><label for="agree2">我已阅读并认同《<a href="http://172.23.1.16/hr/docs/k/11_doc.htm">访客使用网络协议</a>》</label>
  159. <br><br>
  160. <input type="submit" value="  认证  " name="login2" onclick="return onLogin2();" />

  161. <br>
  162. <br>
  163. </center>
  164. *注: 如您正在访问本公司并需要使用本公司WiFi网络,请联系您的接待人员或客户经理以索取授权码
  165. </td>
  166. </tr>
  167. </table>

  168. </td></tr></table>

  169. <br>
  170. <font size=-1>帮助热线:内线5220       

  171. </center>
  172. </form>
  173. </body>
  174. </html>
复制代码

auth.php
  1. <?php
  2. session_start();

  3. $AD_HOST = "XXXXXX:389";        // Active Directory服务器
  4.        
  5. $userkey = "XXXXXX";        // Wiwiz User Key

  6. $loginSuccess = false;

  7. if(isset($_POST['login1'])) {
  8.         if($_POST['AuthType'] == '0' ) {                        //员工通道 - 使用OA系统账户登录并认证
  9.                 $StaffId = $_POST['StaffId'];
  10.                 $Pswd = $_POST['Pswd'];
  11.                
  12.                 if($StaffId == '')
  13.                         die("请输入工号!" );
  14.                 if($Pswd == '')
  15.                         die("请输入密码!" );
  16.                
  17.                 $db = mysql_connect("localhost", "root") or die("OA系统连接异常!");
  18.                 //$db = mysql_connect(":/tmp/mysql.sock", "root") or die("OA系统连接异常!");               
  19.                
  20.                 mysql_select_db("oadb",$db);
  21.                 $result = mysql_query("SELECT count(staffid) as cnt FROM usermaster where staffid='". mysql_real_escape_string($StaffId) ."' and pswd='". mysql_real_escape_string($Pswd) ."'", $db);
  22.                
  23.                 $cnt = mysql_result($result, 0, "cnt");
  24.                
  25.                 mysql_close($db);
  26.                
  27.                 if($cnt <> '0')
  28.                         $loginSuccess = true;
  29.                
  30.         } else if($_POST['AuthType'] == '1' ) {        //员工通道 - 使用域账户登录并认证
  31.                 $DomainUser = $_POST['DomainUser'];
  32.                 $DomainPswd = $_POST['DomainPswd'];
  33.                 $Domain = $_POST['Domain'];

  34.                 if($DomainUser == '')
  35.                         die("请输入域账户名!" );
  36.                 if($DomainPswd == '')
  37.                         die("请输入域账户密码!" );
  38.                 if($Domain == '')
  39.                         die("请选择所在域!" );
  40.                
  41.                 $conn = ldap_connect($AD_HOST) or die("连接失败!" );

  42.                 if($conn){
  43.                         //
  44.                         ldap_set_option ( $conn, LDAP_OPT_PROTOCOL_VERSION, 3 );
  45.                         ldap_set_option ( $conn, LDAP_OPT_REFERRALS, 0 ); // Binding to ldap server
  46.                         $bd = ldap_bind($conn, $DomainUser.'@'.$Domain, $DomainPswd); //  or die ("域账户或密码错误。");
  47.                         if($bd)
  48.                                 $loginSuccess = true;
  49.                 } else{
  50.                         echo "连接失败!";
  51.                 }
  52.         }
  53. }

  54. if(isset($_POST['login2'])) {                                //访客通道(使用授权码认证)
  55.         $AuthCode = $_POST['AuthCode'];
  56.        
  57.         if($AuthCode == '')
  58.                 die("请输授权码!" );
  59.        
  60.         $db = mysql_connect("localhost", "root") or die("OA系统连接异常!");
  61.        
  62.         mysql_select_db("oadb",$db);
  63.         $result = mysql_query("SELECT count(id) as cnt FROM authcode where code='". mysql_real_escape_string($AuthCode). "'", $db);
  64.        
  65.         $cnt = mysql_result($result, 0, "cnt");
  66.        
  67.         mysql_close($db);
  68.        
  69.         if($cnt <> '0')
  70.                 $loginSuccess = true;
  71. }


  72. //
  73. // Do something you need.
  74. // e.g. verify the user
  75. //      ......
  76. //

  77. if($loginSuccess == false) {

  78.         echo "认证失败!";        // if user login failed, show an error message

  79. } else {

  80.         //****************************************************
  81.         // Step 2. Do the pre-auth by calling Wiwiz Auth API
  82.         // IMPORTANT: Do this on your server side(ASP, C#, JSP/Servlet, PHP...),
  83.         //            but DO NOT do this on your client side (HTML/Javascript)
  84.         //****************************************************

  85.         // parameter "action" : REQUIRED!
  86.         // set it to "1" to authenticate the user
  87.         // set it to "0" to block the user
  88.         $action = "1";

  89.         // parameter "tokencode": REQUIRED!
  90.         // set identical to the incoming parameter
  91.         $tokencode = $_SESSION['tokencode'];

  92.         // parameter "srvurl": REQUIRED!
  93.         // set identical to the incoming parameter       
  94.         $srvurl = $_SESSION['srvurl'];

  95.         // parameter "endtime" : OPTIONAL
  96.         // Format: yyyy-mm-dd hh:MM:ss  e.g. 2012-05-31 21:39:00
  97.         // set this parameter to set the time to close the user's Internet connection
  98.         // Note: the value must be url-encoded.  
  99. //        $endtime = urlencode('2012-05-31 21:39:00');
  100.         $endtime = '';       

  101.         // parameter "postauth" : OPTIONAL
  102.         // E.g. http://www.YourDomain.com
  103.         // set this parameter to redirect to a specified URL after authenticated.
  104.         // Note: the value should be url-encoded.  
  105.         //$postauth = urlencode("http://www.wiwiz.com");
  106.         $postauth = '';       

  107.         $parameters = "?wiwiz_auth_api=1&ver=1.0". // parameter "wiwiz_auth_api" and "ver". Fixed value
  108.                         "&tokencode=". $tokencode .        // parameter "tokencode". See above
  109.                         "&userkey=". $userkey .                // parameter "userkey". Set your own User Key
  110.                         "&action=". $action .                // parameter "action". See above
  111.                         "&endtime=". $endtime .                // parameter "endtime". See above
  112.                         "&postauth=". $postauth;         // parameter "postauth". See above

  113.         $verifycode = file_get_contents($srvurl . $parameters);

  114.         if (strpos ($verifycode, "ERR") === 0) {
  115.                 // if there is an error, show error code
  116.                 echo "Error: ". $verifycode;

  117.         } else {
  118.                 // OK, now. do Step 3.

  119.                 //****************************************************
  120.                 // Step 3. Complete the Authentication by calling Wiwiz Auth API
  121.                 //****************************************************       
  122.                 $redirectUrl = $srvurl.                // use the value of incoming parameter "srvurl" as the redirection address
  123.                                 "?wiwiz_auth_api_login=1".        // parameter "wiwiz_auth_api_login"
  124.                                 "&tokencode=". $tokencode .        // parameter "tokencode", set identical to the incoming parameter       
  125.                                 "&verifycode=". $verifycode;        // parameter "verifycode", set identical to the incoming parameter       
  126.                 ob_start();
  127.                 header("Location: ". $redirectUrl);        // finally, do the redirection
  128.                 ob_flush();

  129. //                        echo "<script>location.href="". $redirectUrl .""</script>";

  130.         }

  131. }

  132. ?>
复制代码



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册 微信登录

x

评分

1

查看全部评分

7419

回帖

4万

积分

1万

在线时间

管理员

无线论坛管理员

注册时间
2004-10-2
金币
34530 个
威望
404 个
荣誉
114 个
累计签到:119 天
连续签到:3 天
[LV.200]无线新星
发表于 2012-5-16 21:49 |显示全部楼层
嘿,这个不错
回复

使用道具 举报

19

回帖

75

积分

27 小时

在线时间

上等兵

注册时间
2012-1-31
金币
48 个
威望
1 个
荣誉
0 个
累计签到:1 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2012-5-16 22:48 |显示全部楼层
好馋啊 。。。
回复

使用道具 举报

344

回帖

4373

积分

384 小时

在线时间

少校

中级工程师

注册时间
2011-7-8
金币
3947 个
威望
1 个
荣誉
1 个
累计签到:123 天
连续签到:0 天
[LV.200]无线新星
发表于 2012-5-17 07:34 |显示全部楼层
没有共享吗
回复

使用道具 举报

124

回帖

958

积分

112 小时

在线时间

中尉

注册时间
2011-3-25
金币
799 个
威望
1 个
荣誉
0 个
累计签到:16 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2012-5-21 22:15 |显示全部楼层
这个很强大,研究一下。。。
回复

使用道具 举报

124

回帖

958

积分

112 小时

在线时间

中尉

注册时间
2011-3-25
金币
799 个
威望
1 个
荣誉
0 个
累计签到:16 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2012-5-21 22:26 |显示全部楼层
楼主,这个的PHP程序的源码有木有呢?
加班签到
回复

使用道具 举报

259

回帖

573

积分

106 小时

在线时间

中尉

注册时间
2011-5-3
金币
278 个
威望
3 个
荣誉
0 个
累计签到:1 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2012-5-22 14:49 |显示全部楼层
认证页面程序使用PHP + MySQL,有源码吗,放出来吧~~~
回复

使用道具 举报

369

回帖

1658

积分

85 小时

在线时间

上尉

中级工程师

注册时间
2010-9-11
金币
1258 个
威望
0 个
荣誉
0 个
累计签到:96 天
连续签到:0 天
[LV.100]试剑无线
发表于 2012-5-22 15:17 |显示全部楼层
楼主发这个是什么木个意思?要分享?
回复

使用道具 举报

15

回帖

41

积分

4 小时

在线时间

新兵上阵

注册时间
2012-5-18
金币
26 个
威望
0 个
荣誉
0 个

尚未签到

发表于 2012-5-26 08:08 |显示全部楼层
回复

使用道具 举报

65

回帖

377

积分

86 小时

在线时间

少尉

注册时间
2011-3-28
金币
293 个
威望
1 个
荣誉
0 个
累计签到:5 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2012-5-31 13:02 |显示全部楼层
最近正在研究用Wiwiz与公司网络集成,还望楼主赐教
回复

使用道具 举报

774

回帖

6099

积分

1305 小时

在线时间

中校

技术达人

注册时间
2011-4-12
金币
4969 个
威望
21 个
荣誉
3 个
累计签到:32 天
连续签到:0 天
[LV.50]初入江湖
发表于 2012-6-18 17:27 |显示全部楼层
源码即将发布,呵呵,先吊一吊胃口。。。
回复

使用道具 举报

1008

回帖

2483

积分

284 小时

在线时间

少校

注册时间
2012-1-10
金币
1392 个
威望
3 个
荣誉
0 个
累计签到:11 天
连续签到:0 天
[LV.20]漫游旅程
发表于 2012-6-18 19:03 |显示全部楼层
高级货以后用的到可惜没共享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册 微信登录

本版积分规则

站点统计 | Archiver | 手机版 | 无线门户 ( 粤ICP备11076993号|粤公网安备44010602008359号 ) |网站地图

GMT+8, 2024-5-4 08:29

返回顶部 返回列表