设为首页 收藏本站
查看: 763|回复: 0

[经验分享] 用PHP开发企业Wifi网络Web认证系统(附源码)

[复制链接]
发表于 2017-4-13 12:34:39 | 显示全部楼层 |阅读模式
  本案是为客户的合作单位开发的无线网络的网页认证系统。

本系统实现基于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


  • <?php
  • //****************************************************
  • //Getsincomingparameters
  • //****************************************************

  • $pTokencode=$_REQUEST["tokencode"];//incomingparameter"tokencode"
  • $pSrvurl=$_REQUEST["srvurl"];//incomingparameter"srvurl"

  • session_start();
  • if($pTokencode!=null)
  • $_SESSION['tokencode']=$pTokencode;
  • if($pSrvurl!=null)
  • $_SESSION['srvurl']=$pSrvurl;
  • ?>

  • <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">
  • <html>
  • <head>
  • <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
  • <metahttp-equiv="Content-Language"content="zh">
  • <metahttp-equiv="Pragma"content="no-cache">
  • <metahttp-equiv="Cache-Control"content="no-cache">

  • <title>WifiPortal</title>
  • <script>
  • functiononLogin1(){

  • if(document.getElementById("AuthType0").checked==false&&document.getElementById("AuthType1").checked==false){
  • alert("请选择“使用OA系统账户登录”或“使用域账号登录”。");
  • returnfalse;
  • }

  • if(document.getElementById("agree1").checked==false){
  • alert("认证前您需要阅读并认同公司《计算机及网络使用管理规定》。");
  • returnfalse;
  • }

  • returntrue;
  • }

  • functiononLogin2(){
  • if(document.getElementById("agree2").checked==false){
  • alert("认证前您需要阅读并认同《访客使用网络协议》。");
  • returnfalse;
  • }

  • returntrue;
  • }
  • </script>

  • </head>

  • <body>
  • <formaction="auth.php"method="post">

  • <center>
  • <br>
  • <fontstyle="font-size:22px"color="red">
  • <b>XXX公司WiFi认证系统</font>
  • <br><br>

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

  • <br>
  • <br>

  • <tablewidth="760">
  • <tr>
  • <tdwidth="60%">

  • <tablewidth="90%"height="340"border="0"cellspacing="1"cellpadding="5"bgcolor="#cccccc"style="font-size:12px">
  • <trbgcolor="#eef1ff">
  • <tdalign=center>

  • <b><fontstyle="font-size:14px">员工通道</b></font>


  • <tablestyle="font-size:12px">
  • <tr>
  • <tdcolspan=2>

  • <br>
  • <inputtype="radio"name="AuthType"id="AuthType0"value="0"/><labelfor="AuthType0">使用OA系统账户登录</label>
  • </td>
  • </tr>

  • <tr>
  • <td>
  • 工号:
  • </td>
  • <td>
  • <inputtype="text"name="StaffId"/>
  • </td>
  • </tr>

  • <tr>
  • <td>
  • 密码:
  • </td>
  • <td>
  • <inputtype="password"name="Pswd"/>
  • </td>
  • </tr>

  • <tr>
  • <tdcolspan=2>
  • <inputtype="radio"name="AuthType"id="AuthType1"value="1"/><labelfor="AuthType1">使用域账号登录</label>
  • </td>
  • </tr>

  • <tr>
  • <td>
  • 所在域:
  • </td>
  • <td>
  • <selectname="Domain">
  • <optionvalue="MD">MD</option>
  • <optionvalue="Marketing">Marketing</option>
  • </select>
  • </td>
  • </tr>

  • <tr>
  • <td>
  • 域账户名:
  • </td>
  • <td>
  • <inputtype="text"name="DomainUser"/>
  • </td>
  • </tr>

  • <tr>
  • <td>
  • 密码:
  • </td>
  • <td>
  • <inputtype="password"name="DomainPswd"/>
  • </td>
  • </tr>

  • </table>

  • <br>
  • <inputtype="checkbox"name="agree1"id="agree1"><labelfor="agree1">我已阅读公司《<ahref="http://172.23.1.16/hr/docs/k/12_doc.htm">计算机及网络使用管理规定</a>》</label>
  • <br><br>
  • <inputtype="submit"value="登录/认证"name="login1"onclick="returnonLogin1();"/>

  • </td>
  • </tr>
  • </table>

  • </td>

  • <tdwidth="40%">

  • <tablewidth="90%"height="340"border="0"cellspacing="1"cellpadding="8"bgcolor="#cccccc"style="font-size:12px">
  • <trbgcolor="#eef1ff">
  • <td>
  • <center>
  • <b><fontstyle="font-size:14px">访客通道</b></font>
  • <br><br>

  • <tablestyle="font-size:12px">
  • <tr>
  • <tdcolspan=2>

  • <center>访客请使用授权码进行认证<br><br>
  • </td>
  • </tr>

  • <tr>
  • <td>

  • 授权码:
  • </td>
  • <td>
  • <inputtype="text"style="width:100px"name="AuthCode"/>

  • </td>
  • </tr>


  • </td>
  • </tr>
  • </table>

  • <br>
  • <inputtype="checkbox"name="agree2"id="agree2"><labelfor="agree2">我已阅读并认同《<ahref="http://172.23.1.16/hr/docs/k/11_doc.htm">访客使用网络协议</a>》</label>
  • <br><br>
  • <inputtype="submit"value="认证"name="login2"onclick="returnonLogin2();"/>

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

  • </td></tr></table>

  • <br>
  • <fontsize=-1>帮助热线:内线5220

  • </center>
  • </form>
  • </body>
  • </html>

  auth.php


  • <?php
  • session_start();

  • $AD_HOST="XXXXXX:389";//ActiveDirectory服务器

  • $userkey="XXXXXX";//WiwizUserKey

  • $loginSuccess=false;

  • if(isset($_POST['login1'])){
  • if($_POST['AuthType']=='0'){//员工通道-使用OA系统账户登录并认证
  • $StaffId=$_POST['StaffId'];
  • $Pswd=$_POST['Pswd'];

  • if($StaffId=='')
  • die("请输入工号!");
  • if($Pswd=='')
  • die("请输入密码!");

  • $db=mysql_connect("localhost","root")ordie("OA系统连接异常!");
  • //$db=mysql_connect(":/tmp/mysql.sock","root")ordie("OA系统连接异常!");

  • mysql_select_db("oadb",$db);
  • $result=mysql_query("SELECTcount(staffid)ascntFROMusermasterwherestaffid='".mysql_real_escape_string($StaffId)."'andpswd='".mysql_real_escape_string($Pswd)."'",$db);

  • $cnt=mysql_result($result,0,"cnt");

  • mysql_close($db);

  • if($cnt<>'0')
  • $loginSuccess=true;

  • }elseif($_POST['AuthType']=='1'){//员工通道-使用域账户登录并认证
  • $DomainUser=$_POST['DomainUser'];
  • $DomainPswd=$_POST['DomainPswd'];
  • $Domain=$_POST['Domain'];

  • if($DomainUser=='')
  • die("请输入域账户名!");
  • if($DomainPswd=='')
  • die("请输入域账户密码!");
  • if($Domain=='')
  • die("请选择所在域!");

  • $conn=ldap_connect($AD_HOST)ordie("连接失败!");

  • if($conn){
  • //
  • ldap_set_option($conn,LDAP_OPT_PROTOCOL_VERSION,3);
  • ldap_set_option($conn,LDAP_OPT_REFERRALS,0);//Bindingtoldapserver
  • $bd=ldap_bind($conn,$DomainUser.'@'.$Domain,$DomainPswd);//ordie("域账户或密码错误。");
  • if($bd)
  • $loginSuccess=true;
  • }else{
  • echo"连接失败!";
  • }
  • }
  • }

  • if(isset($_POST['login2'])){//访客通道(使用授权码认证)
  • $AuthCode=$_POST['AuthCode'];

  • if($AuthCode=='')
  • die("请输授权码!");

  • $db=mysql_connect("localhost","root")ordie("OA系统连接异常!");

  • mysql_select_db("oadb",$db);
  • $result=mysql_query("SELECTcount(id)ascntFROMauthcodewherecode='".mysql_real_escape_string($AuthCode)."'",$db);

  • $cnt=mysql_result($result,0,"cnt");

  • mysql_close($db);

  • if($cnt<>'0')
  • $loginSuccess=true;
  • }


  • //
  • //Dosomethingyouneed.
  • //e.g.verifytheuser
  • //......
  • //

  • if($loginSuccess==false){

  • echo"认证失败!";//ifuserloginfailed,showanerrormessage

  • }else{

  • //****************************************************
  • //Step2.Dothepre-authbycallingWiwizAuthAPI
  • //IMPORTANT:Dothisonyourserverside(ASP,C#,JSP/Servlet,PHP...),
  • //butDONOTdothisonyourclientside(HTML/Javascript)
  • //****************************************************

  • //parameter"action":REQUIRED!
  • //setitto"1"toauthenticatetheuser
  • //setitto"0"toblocktheuser
  • $action="1";

  • //parameter"tokencode":REQUIRED!
  • //setidenticaltotheincomingparameter
  • $tokencode=$_SESSION['tokencode'];

  • //parameter"srvurl":REQUIRED!
  • //setidenticaltotheincomingparameter
  • $srvurl=$_SESSION['srvurl'];

  • //parameter"endtime":OPTIONAL
  • //Format:yyyy-mm-ddhh:MM:sse.g.2012-05-3121:39:00
  • //setthisparametertosetthetimetoclosetheuser'sInternetconnection
  • //Note:thevaluemustbeurl-encoded.
  • //$endtime=urlencode('2012-05-3121:39:00');
  • $endtime='';

  • //parameter"postauth":OPTIONAL
  • //E.g.http://www.YourDomain.com
  • //setthisparametertoredirecttoaspecifiedURLafterauthenticated.
  • //Note:thevalueshouldbeurl-encoded.
  • //$postauth=urlencode("http://www.wiwiz.com");
  • $postauth='';

  • $parameters="?wiwiz_auth_api=1&ver=1.0".//parameter"wiwiz_auth_api"and"ver".Fixedvalue
  • "&tokencode=".$tokencode.//parameter"tokencode".Seeabove
  • "&userkey=".$userkey.//parameter"userkey".SetyourownUserKey
  • "&action=".$action.//parameter"action".Seeabove
  • "&endtime=".$endtime.//parameter"endtime".Seeabove
  • "&postauth=".$postauth;//parameter"postauth".Seeabove

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

  • if(strpos($verifycode,"ERR")===0){
  • //ifthereisanerror,showerrorcode
  • echo"Error:".$verifycode;

  • }else{
  • //OK,now.doStep3.

  • //****************************************************
  • //Step3.CompletetheAuthenticationbycallingWiwizAuthAPI
  • //****************************************************
  • $redirectUrl=$srvurl.//usethevalueofincomingparameter"srvurl"astheredirectionaddress
  • "?wiwiz_auth_api_login=1".//parameter"wiwiz_auth_api_login"
  • "&tokencode=".$tokencode.//parameter"tokencode",setidenticaltotheincomingparameter
  • "&verifycode=".$verifycode;//parameter"verifycode",setidenticaltotheincomingparameter
  • ob_start();
  • header("Location:".$redirectUrl);//finally,dotheredirection
  • ob_flush();

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

  • }

  • }

  • ?>

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-364496-1-1.html 上篇帖子: 常用的php字符串函数的解析及例子说明 下篇帖子: php开发微信公众账号开发包开发教程四之响应消息封装
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表