用PHP开发企业Wifi网络Web认证系统(附源码)

本案是为客户的合作单位开发的无线网络的网页认证系统。
本系统实现基于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. //Getsincomingparameters
  4. //****************************************************
  5. $pTokencode=$_REQUEST["tokencode"];//incomingparameter"tokencode"
  6. $pSrvurl=$_REQUEST["srvurl"];//incomingparameter"srvurl"
  7. session_start();
  8. if($pTokencode!=null)
  9. $_SESSION['tokencode']=$pTokencode;
  10. if($pSrvurl!=null)
  11. $_SESSION['srvurl']=$pSrvurl;
  12. ?>
  13. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
  14. <html>
  15. <head>
  16. <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
  17. <metahttp-equiv="Content-Language"content="zh">
  18. <metahttp-equiv="Pragma"content="no-cache">
  19. <metahttp-equiv="Cache-Control"content="no-cache">
  20. <title>WifiPortal</title>
  21. <script>
  22. functiononLogin1(){
  23. if(document.getElementById("AuthType0").checked==false&&document.getElementById("AuthType1").checked==false){
  24. alert("请选择“使用OA系统账户登录”或“使用域账号登录”。");
  25. returnfalse;
  26. }
  27. if(document.getElementById("agree1").checked==false){
  28. alert("认证前您需要阅读并认同公司《计算机及网络使用管理规定》。");
  29. returnfalse;
  30. }
  31. returntrue;
  32. }
  33. functiononLogin2(){
  34. if(document.getElementById("agree2").checked==false){
  35. alert("认证前您需要阅读并认同《访客使用网络协议》。");
  36. returnfalse;
  37. }
  38. returntrue;
  39. }
  40. </script>
  41. </head>
  42. <body>
  43. <formaction="auth.php"method="post">
  44. <center>
  45. <br>
  46. <fontstyle="font-size:22px"color="red">
  47. <b>XXX公司WiFi认证系统</font>
  48. <br><br>
  49. <fontstyle="font-size:14px">
  50. 本公司、子公司及合作单位员工请使用OA系统账户或域账户进行认证
  51. <br>
  52. (仅限开通使用Internet权限的员工)
  53. <br><br>
  54. 访客请使用授权码进行认证
  55. </font></b>
  56. <br>
  57. <br>
  58. <tablewidth="760">
  59. <tr>
  60. <tdwidth="60%">
  61. <tablewidth="90%"height="340"border="0"cellspacing="1"cellpadding="5"bgcolor="#cccccc"style="font-size:12px">
  62. <trbgcolor="#eef1ff">
  63. <tdalign=center>
  64. <b><fontstyle="font-size:14px">员工通道</b></font>
  65. <tablestyle="font-size:12px">
  66. <tr>
  67. <tdcolspan=2>
  68. <br>
  69. <inputtype="radio"name="AuthType"id="AuthType0"value="0"/><labelfor="AuthType0">使用OA系统账户登录</label>
  70. </td>
  71. </tr>
  72. <tr>
  73. <td>
  74. 工号:
  75. </td>
  76. <td>
  77. <inputtype="text"name="StaffId"/>
  78. </td>
  79. </tr>
  80. <tr>
  81. <td>
  82. 密码:
  83. </td>
  84. <td>
  85. <inputtype="password"name="Pswd"/>
  86. </td>
  87. </tr>
  88. <tr>
  89. <tdcolspan=2>
  90. <inputtype="radio"name="AuthType"id="AuthType1"value="1"/><labelfor="AuthType1">使用域账号登录</label>
  91. </td>
  92. </tr>
  93. <tr>
  94. <td>
  95. 所在域:
  96. </td>
  97. <td>
  98. <selectname="Domain">
  99. <optionvalue="MD">MD</option>
  100. <optionvalue="Marketing">Marketing</option>
  101. </select>
  102. </td>
  103. </tr>
  104. <tr>
  105. <td>
  106. 域账户名:
  107. </td>
  108. <td>
  109. <inputtype="text"name="DomainUser"/>
  110. </td>
  111. </tr>
  112. <tr>
  113. <td>
  114. 密码:
  115. </td>
  116. <td>
  117. <inputtype="password"name="DomainPswd"/>
  118. </td>
  119. </tr>
  120. </table>
  121. <br>
  122. <inputtype="checkbox"name="agree1"id="agree1"><labelfor="agree1">我已阅读公司《<ahref="http://172.23.1.16/hr/docs/k/12_doc.htm">计算机及网络使用管理规定</a>》</label>
  123. <br><br>
  124. <inputtype="submit"value="登录/认证"name="login1"onclick="returnonLogin1();"/>
  125. </td>
  126. </tr>
  127. </table>
  128. </td>
  129. <tdwidth="40%">
  130. <tablewidth="90%"height="340"border="0"cellspacing="1"cellpadding="8"bgcolor="#cccccc"style="font-size:12px">
  131. <trbgcolor="#eef1ff">
  132. <td>
  133. <center>
  134. <b><fontstyle="font-size:14px">访客通道</b></font>
  135. <br><br>
  136. <tablestyle="font-size:12px">
  137. <tr>
  138. <tdcolspan=2>
  139. <center>访客请使用授权码进行认证<br><br>
  140. </td>
  141. </tr>
  142. <tr>
  143. <td>
  144. 授权码:
  145. </td>
  146. <td>
  147. <inputtype="text"style="width:100px"name="AuthCode"/>
  148. </td>
  149. </tr>
  150. </td>
  151. </tr>
  152. </table>
  153. <br>
  154. <inputtype="checkbox"name="agree2"id="agree2"><labelfor="agree2">我已阅读并认同《<ahref="http://172.23.1.16/hr/docs/k/11_doc.htm">访客使用网络协议</a>》</label>
  155. <br><br>
  156. <inputtype="submit"value="认证"name="login2"onclick="returnonLogin2();"/>
  157. <br>
  158. <br>
  159. </center>
  160. *注:如您正在访问本公司并需要使用本公司WiFi网络,请联系您的接待人员或客户经理以索取授权码
  161. </td>
  162. </tr>
  163. </table>
  164. </td></tr></table>
  165. <br>
  166. <fontsize=-1>帮助热线:内线5220
  167. </center>
  168. </form>
  169. </body>
  170. </html>

auth.php


 
  1. <?php
  2. session_start();
  3. $AD_HOST="XXXXXX:389";//ActiveDirectory服务器
  4. $userkey="XXXXXX";//WiwizUserKey
  5. $loginSuccess=false;
  6. if(isset($_POST['login1'])){
  7. if($_POST['AuthType']=='0'){//员工通道-使用OA系统账户登录并认证
  8. $StaffId=$_POST['StaffId'];
  9. $Pswd=$_POST['Pswd'];
  10. if($StaffId=='')
  11. die("请输入工号!");
  12. if($Pswd=='')
  13. die("请输入密码!");
  14. $db=mysql_connect("localhost","root")ordie("OA系统连接异常!");
  15. //$db=mysql_connect(":/tmp/mysql.sock","root")ordie("OA系统连接异常!");
  16. mysql_select_db("oadb",$db);
  17. $result=mysql_query("SELECTcount(staffid)ascntFROMusermasterwherestaffid='".mysql_real_escape_string($StaffId)."'andpswd='".mysql_real_escape_string($Pswd)."'",$db);
  18. $cnt=mysql_result($result,0,"cnt");
  19. mysql_close($db);
  20. if($cnt<>'0')
  21. $loginSuccess=true;
  22. }elseif($_POST['AuthType']=='1'){//员工通道-使用域账户登录并认证
  23. $DomainUser=$_POST['DomainUser'];
  24. $DomainPswd=$_POST['DomainPswd'];
  25. $Domain=$_POST['Domain'];
  26. if($DomainUser=='')
  27. die("请输入域账户名!");
  28. if($DomainPswd=='')
  29. die("请输入域账户密码!");
  30. if($Domain=='')
  31. die("请选择所在域!");
  32. $conn=ldap_connect($AD_HOST)ordie("连接失败!");
  33. if($conn){
  34. //
  35. ldap_set_option($conn,LDAP_OPT_PROTOCOL_VERSION,3);
  36. ldap_set_option($conn,LDAP_OPT_REFERRALS,0);//Bindingtoldapserver
  37. $bd=ldap_bind($conn,$DomainUser.'@'.$Domain,$DomainPswd);//ordie("域账户或密码错误。");
  38. if($bd)
  39. $loginSuccess=true;
  40. }else{
  41. echo"连接失败!";
  42. }
  43. }
  44. }
  45. if(isset($_POST['login2'])){//访客通道(使用授权码认证)
  46. $AuthCode=$_POST['AuthCode'];
  47. if($AuthCode=='')
  48. die("请输授权码!");
  49. $db=mysql_connect("localhost","root")ordie("OA系统连接异常!");
  50. mysql_select_db("oadb",$db);
  51. $result=mysql_query("SELECTcount(id)ascntFROMauthcodewherecode='".mysql_real_escape_string($AuthCode)."'",$db);
  52. $cnt=mysql_result($result,0,"cnt");
  53. mysql_close($db);
  54. if($cnt<>'0')
  55. $loginSuccess=true;
  56. }
  57. //
  58. //Dosomethingyouneed.
  59. //e.g.verifytheuser
  60. //......
  61. //
  62. if($loginSuccess==false){
  63. echo"认证失败!";//ifuserloginfailed,showanerrormessage
  64. }else{
  65. //****************************************************
  66. //Step2.Dothepre-authbycallingWiwizAuthAPI
  67. //IMPORTANT:Dothisonyourserverside(ASP,C#,JSP/Servlet,PHP...),
  68. //butDONOTdothisonyourclientside(HTML/Javascript)
  69. //****************************************************
  70. //parameter"action":REQUIRED!
  71. //setitto"1"toauthenticatetheuser
  72. //setitto"0"toblocktheuser
  73. $action="1";
  74. //parameter"tokencode":REQUIRED!
  75. //setidenticaltotheincomingparameter
  76. $tokencode=$_SESSION['tokencode'];
  77. //parameter"srvurl":REQUIRED!
  78. //setidenticaltotheincomingparameter
  79. $srvurl=$_SESSION['srvurl'];
  80. //parameter"endtime":OPTIONAL
  81. //Format:yyyy-mm-ddhh:MM:sse.g.2012-05-3121:39:00
  82. //setthisparametertosetthetimetoclosetheuser'sInternetconnection
  83. //Note:thevaluemustbeurl-encoded.
  84. //$endtime=urlencode('2012-05-3121:39:00');
  85. $endtime='';
  86. //parameter"postauth":OPTIONAL
  87. //E.g.http://www.YourDomain.com
  88. //setthisparametertoredirecttoaspecifiedURLafterauthenticated.
  89. //Note:thevalueshouldbeurl-encoded.
  90. //$postauth=urlencode("http://www.wiwiz.com");
  91. $postauth='';
  92. $parameters="?wiwiz_auth_api=1&ver=1.0".//parameter"wiwiz_auth_api"and"ver".Fixedvalue
  93. "&tokencode=".$tokencode.//parameter"tokencode".Seeabove
  94. "&userkey=".$userkey.//parameter"userkey".SetyourownUserKey
  95. "&action=".$action.//parameter"action".Seeabove
  96. "&endtime=".$endtime.//parameter"endtime".Seeabove
  97. "&postauth=".$postauth;//parameter"postauth".Seeabove
  98. $verifycode=file_get_contents($srvurl.$parameters);
  99. if(strpos($verifycode,"ERR")===0){
  100. //ifthereisanerror,showerrorcode
  101. echo"Error:".$verifycode;
  102. }else{
  103. //OK,now.doStep3.
  104. //****************************************************
  105. //Step3.CompletetheAuthenticationbycallingWiwizAuthAPI
  106. //****************************************************
  107. $redirectUrl=$srvurl.//usethevalueofincomingparameter"srvurl"astheredirectionaddress
  108. "?wiwiz_auth_api_login=1".//parameter"wiwiz_auth_api_login"
  109. "&tokencode=".$tokencode.//parameter"tokencode",setidenticaltotheincomingparameter
  110. "&verifycode=".$verifycode;//parameter"verifycode",setidenticaltotheincomingparameter
  111. ob_start();
  112. header("Location:".$redirectUrl);//finally,dotheredirection
  113. ob_flush();
  114. //echo"<script>location.href=\"".$redirectUrl."\"</script>";
  115. }
  116. }
  117. ?>

本文出自 “野兽技术博客” 博客,请务必保留此出处http://beastwu.blog.51cto.com/5091229/865707


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值