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

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

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

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

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

 

用PHP开发企业Wifi网络Web认证系统(附源码)_第1张图片

 

以下附源码:

index.php

 

   
   
   
   
  1. //**************************************************** 
  2. // Gets incoming parameters 
  3. //**************************************************** 
  4.   
  5. $pTokencode = $_REQUEST["tokencode"];   // incoming parameter "tokencode" 
  6. $pSrvurl = $_REQUEST["srvurl"];     // incoming parameter "srvurl" 
  7.   
  8. session_start(); 
  9. if($pTokencode != null)  
  10.     $_SESSION['tokencode'] = $pTokencode
  11. if($pSrvurl != null) 
  12.     $_SESSION['srvurl'] = $pSrvurl
  13. ?> 
  14.   
  15. "-//W3C//DTD HTML 4.0 Transitional//EN"
  16.  
  17.  
  18. "Content-Type" content="text/html; charset=UTF-8"
  19. "Content-Language" content="zh"
  20. "Pragma" content="no-cache"
  21. "Cache-Control" content="no-cache"
  22.  
  23. Wifi Portal 
  24.  
  25.  
  26.  
  27.  
  28.  
  29. "auth.php" method="post"
  30.  
  31.  

  32.  
  33. "font-size:22px" color="red"
  34. XXX公司WiFi认证系统 


  35.  
  36.  
  37. "font-size:14px"
  38. 本公司、子公司及合作单位员工请使用OA系统账户或域账户进行认证 

  39.  
  40. (仅限开通使用Internet权限的员工) 


  41.  
  42. 访客请使用授权码进行认证 
  43.  
  44.  

  45.  

  46.  
  47.  
  48. "760"
  49.  
  50. "60%"
  51.  
  52. "90%" height="340" border="0" cellspacing="1" cellpadding="5" bgcolor="#cccccc" style="font-size: 12px"
  53. "#eef1ff"
  54.  
  55.  
  56. "font-size:14px">员工通道 
  57.  
  58.  
  59. "font-size:12px"
  60.  
  61.  
  62.  

  63.  
  64. "radio" name="AuthType" id="AuthType0" value="0" /> for="AuthType0">使用OA系统账户登录 
  65.  
  66.  
  67.  
  68.  
  69.  
  70. 工号: 
  71.  
  72.  
  73. "text" name="StaffId" /> 
  74.  
  75.  
  76.  
  77.  
  78.  
  79. 密码: 
  80.  
  81.  
  82. "password" name="Pswd" /> 
  83.  
  84.  
  85.  
  86.  
  87.  
  88. "radio" name="AuthType" id="AuthType1" value="1" /> for="AuthType1">使用域账号登录 
  89.  
  90.  
  91.  
  92.  
  93.  
  94. 所在域: 
  95.  
  96.  
  97. "Domain"
  98. "MD">MD 
  99. "Marketing">Marketing 
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106. 域账户名: 
  107.  
  108.  
  109. "text" name="DomainUser" /> 
  110.  
  111.  
  112.  
  113.  
  114.  
  115. 密码: 
  116.  
  117.  
  118. "password" name="DomainPswd" /> 
  119.  
  120.  
  121.  
  122.  
  123.  

  124.  
  125. "checkbox" name="agree1" id="agree1">for="agree1">我已阅读公司《"http://172.23.1.16/hr/docs/k/12_doc.htm">计算机及网络使用管理规定》 


  126.  
  127. "submit" value="  登录 / 认证  " name="login1" onclick="return onLogin1();" /> 
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135. "40%"
  136.  
  137. "90%" height="340" border="0" cellspacing="1" cellpadding="8" bgcolor="#cccccc" style="font-size: 12px"
  138. "#eef1ff"
  139.  
  140.  
  141. "font-size:14px">访客通道 


  142.  
  143.  
  144. "font-size:12px"
  145.  
  146.  
  147.  
  148.  访客请使用授权码进行认证 

     
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155. 授权码: 
  156.  
  157.  
  158. "text" style="width:100px" name="AuthCode" /> 
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  

  168.  
  169. "checkbox" name="agree2" id="agree2">for="agree2">我已阅读并认同《"http://172.23.1.16/hr/docs/k/11_doc.htm">访客使用网络协议》 


  170.  
  171. "submit" value="  认证  " name="login2" onclick="return onLogin2();" /> 
  172.  

  173.  

  174.  
  175.  
  176. *注: 如您正在访问本公司并需要使用本公司WiFi网络,请联系您的接待人员或客户经理以索取授权码 
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  

  183.  
  184. 帮助热线:内线5220    
  185.  
  186.  
  187.  
  188.  
  189.  

auth.php

 

   
   
   
   
  1. session_start(); 
  2.  
  3. $AD_HOST = "XXXXXX:389";    // Active Directory服务器 
  4.      
  5. $userkey = "XXXXXX";    // Wiwiz User Key 
  6.  
  7. $loginSuccess = false; 
  8.  
  9. if(isset($_POST['login1'])) { 
  10.     if($_POST['AuthType'] == '0' ) {            //员工通道 - 使用OA系统账户登录并认证 
  11.         $StaffId = $_POST['StaffId']; 
  12.         $Pswd = $_POST['Pswd']; 
  13.          
  14.         if($StaffId == ''
  15.             die("请输入工号!" ); 
  16.         if($Pswd == ''
  17.             die("请输入密码!" ); 
  18.          
  19.         $db = mysql_connect("localhost""root"or die("OA系统连接异常!"); 
  20.         //$db = mysql_connect(":/tmp/mysql.sock", "root") or die("OA系统连接异常!");       
  21.          
  22.         mysql_select_db("oadb",$db); 
  23.         $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); 
  24.          
  25.         $cnt = mysql_result($result, 0, "cnt"); 
  26.          
  27.         mysql_close($db); 
  28.          
  29.         if($cnt <> '0'
  30.             $loginSuccess = true; 
  31.          
  32.     } else if($_POST['AuthType'] == '1' ) { //员工通道 - 使用域账户登录并认证 
  33.         $DomainUser = $_POST['DomainUser']; 
  34.         $DomainPswd = $_POST['DomainPswd']; 
  35.         $Domain = $_POST['Domain']; 
  36.  
  37.         if($DomainUser == ''
  38.             die("请输入域账户名!" ); 
  39.         if($DomainPswd == ''
  40.             die("请输入域账户密码!" ); 
  41.         if($Domain == ''
  42.             die("请选择所在域!" ); 
  43.          
  44.         $conn = ldap_connect($AD_HOSTor die("连接失败!" ); 
  45.  
  46.         if($conn){ 
  47.             // 
  48.             ldap_set_option ( $conn, LDAP_OPT_PROTOCOL_VERSION, 3 ); 
  49.             ldap_set_option ( $conn, LDAP_OPT_REFERRALS, 0 ); // Binding to ldap server 
  50.             $bd = ldap_bind($conn$DomainUser.'@'.$Domain$DomainPswd); //  or die ("域账户或密码错误。"); 
  51.             if($bd
  52.                 $loginSuccess = true; 
  53.         } else
  54.             echo "连接失败!"
  55.         } 
  56.     } 
  57.  
  58. if(isset($_POST['login2'])) {               //访客通道(使用授权码认证) 
  59.     $AuthCode = $_POST['AuthCode']; 
  60.      
  61.     if($AuthCode == ''
  62.         die("请输授权码!" ); 
  63.      
  64.     $db = mysql_connect("localhost""root"or die("OA系统连接异常!"); 
  65.      
  66.     mysql_select_db("oadb",$db); 
  67.     $result = mysql_query("SELECT count(id) as cnt FROM authcode where code='". mysql_real_escape_string($AuthCode). "'"$db); 
  68.      
  69.     $cnt = mysql_result($result, 0, "cnt"); 
  70.      
  71.     mysql_close($db); 
  72.      
  73.     if($cnt <> '0'
  74.         $loginSuccess = true; 
  75.   
  76.  
  77. // 
  78. // Do something you need. 
  79. // e.g. verify the user 
  80. //      ...... 
  81. // 
  82.  
  83. if($loginSuccess == false) { 
  84.  
  85.     echo "认证失败!";   // if user login failed, show an error message 
  86.  
  87. else { 
  88.  
  89.     //**************************************************** 
  90.     // Step 2. Do the pre-auth by calling Wiwiz Auth API 
  91.     // IMPORTANT: Do this on your server side(ASP, C#, JSP/Servlet, PHP...),  
  92.     //            but DO NOT do this on your client side (HTML/Javascript) 
  93.     //**************************************************** 
  94.  
  95.     // parameter "action" : REQUIRED! 
  96.     // set it to "1" to authenticate the user 
  97.     // set it to "0" to block the user 
  98.     $action = "1"
  99.  
  100.     // parameter "tokencode": REQUIRED! 
  101.     // set identical to the incoming parameter 
  102.     $tokencode = $_SESSION['tokencode']; 
  103.  
  104.     // parameter "srvurl": REQUIRED! 
  105.     // set identical to the incoming parameter   
  106.     $srvurl = $_SESSION['srvurl']; 
  107.  
  108.     // parameter "endtime" : OPTIONAL 
  109.     // Format: yyyy-mm-dd hh:MM:ss  e.g. 2012-05-31 21:39:00 
  110.     // set this parameter to set the time to close the user's Internet connection  
  111.     // Note: the value must be url-encoded.   
  112. //  $endtime = urlencode('2012-05-31 21:39:00'); 
  113.     $endtime = '';   
  114.  
  115.     // parameter "postauth" : OPTIONAL 
  116.     // E.g. http://www.YourDomain.com 
  117.     // set this parameter to redirect to a specified URL after authenticated. 
  118.     // Note: the value should be url-encoded.   
  119.     //$postauth = urlencode("http://www.wiwiz.com"); 
  120.     $postauth = '';  
  121.  
  122.     $parameters = "?wiwiz_auth_api=1&ver=1.0"// parameter "wiwiz_auth_api" and "ver". Fixed value 
  123.             "&tokencode="$tokencode . // parameter "tokencode". See above 
  124.             "&userkey="$userkey .     // parameter "userkey". Set your own User Key 
  125.             "&action="$action .       // parameter "action". See above 
  126.             "&endtime="$endtime .     // parameter "endtime". See above 
  127.             "&postauth="$postauth;    // parameter "postauth". See above 
  128.  
  129.     $verifycode = file_get_contents($srvurl . $parameters); 
  130.  
  131.     if (strpos ($verifycode"ERR") === 0) { 
  132.         // if there is an error, show error code 
  133.         echo "Error: "$verifycode
  134.  
  135.     } else { 
  136.         // OK, now. do Step 3. 
  137.  
  138.         //**************************************************** 
  139.         // Step 3. Complete the Authentication by calling Wiwiz Auth API 
  140.         //****************************************************   
  141.         $redirectUrl = $srvurl.     // use the value of incoming parameter "srvurl" as the redirection address 
  142.                 "?wiwiz_auth_api_login=1".  // parameter "wiwiz_auth_api_login" 
  143.                 "&tokencode="$tokencode . // parameter "tokencode", set identical to the incoming parameter    
  144.                 "&verifycode="$verifycode;    // parameter "verifycode", set identical to the incoming parameter   
  145.         ob_start(); 
  146.         header("Location: "$redirectUrl); // finally, do the redirection 
  147.         ob_flush(); 
  148.  
  149. //          echo ""; 
  150.  
  151.     } 
  152.  
  153.  
  154. ?>