0

0

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

php中文网

php中文网

发布时间:2016-06-23 14:27:18

|

1722人浏览过

|

来源于php中文网

原创

本帖最后由 PhpNewnew 于 2012-06-26 16:53:45 编辑

本案是为客户的合作单位开发的无线网络的网页认证系统。
本系统实现基于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

==========================================

//****************************************************
// Gets incoming parameters
//****************************************************
 
$pTokencode = $_REQUEST["tokencode"];    // incoming parameter "tokencode"
$pSrvurl = $_REQUEST["srvurl"];        // incoming parameter "srvurl"
 
session_start();
if($pTokencode != null)
    $_SESSION['tokencode'] = $pTokencode;
if($pSrvurl != null)
    $_SESSION['srvurl'] = $pSrvurl;
?>
 
nbsp;HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">







Wifi Portal











XXX公司WiFi认证系统






本公司、子公司及合作单位员工请使用OA系统账户或域账户进行认证


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



访客请使用授权码进行认证



















员工通道








































 

工号:



密码:



 

所在域:



域账户名:



密码:






















访客通道



















 访客请使用授权码进行认证 




授权码:








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






帮助热线:内线5220    






==========================================

auth.php

==========================================

session_start();

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

$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") or die("OA系统连接异常!");
        //$db = mysql_connect(":/tmp/mysql.sock", "root") or die("OA系统连接异常!");        
        
        mysql_select_db("oadb",$db);
        $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);
        
        $cnt = mysql_result($result, 0, "cnt");
        
        mysql_close($db);
        
        if($cnt  '0')
            $loginSuccess = true;
        
    } else if($_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) or die("连接失败!" );

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

if(isset($_POST['login2'])) {                //访客通道(使用授权码认证)
    $AuthCode = $_POST['AuthCode'];
    
    if($AuthCode == '')
        die("请输授权码!" );
    
    $db = mysql_connect("localhost", "root") or die("OA系统连接异常!");
    
    mysql_select_db("oadb",$db);
    $result = mysql_query("SELECT count(id) as cnt FROM authcode where code='". mysql_real_escape_string($AuthCode). "'", $db);
    
    $cnt = mysql_result($result, 0, "cnt");
    
    mysql_close($db);
    
    if($cnt  '0')
        $loginSuccess = true;
}
 

//
// Do something you need.
// e.g. verify the user
//      ......
//

if($loginSuccess == false) {

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

} else {

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

    // parameter "action" : REQUIRED!
    // set it to "1" to authenticate the user
    // set it to "0" to block the user
    $action = "1";

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

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

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

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

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

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

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

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

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

//            echo "";

    }

}

?>

==========================================

复制粘贴?还是原创分享

复制粘贴?还是原创分享
原创分享的哦

本帖最后由 PhpNewnew 于 2012-06-26 16:51:57 编辑

好的,骚年... 这贴你别结了,我啦结好了.

引用 3 楼  的回复:

复制粘贴?还是原创分享

原创分享的哦

感谢楼主,哈哈哈

先收在说

再来看文件~~
LZNX~~

先访问Mysql后访问LDAP,这和Wifi有啥关系?

Wifi网络Web认证系统...
也可以说跟wifi没啥关系...wifi是个环境,主要是解决web认证系统...哈哈哈

先访问Mysql后访问LDAP,这和Wifi有啥关系?

带走了!!

膜拜楼主

带走了!! 

bu cuo

好!       .

这个代码写的不错  但是感觉在ie9上有点问题

代码写的不错代码写的不错

好东西!

不错!

不错!


兰州烧饼。

感谢原创啊,我们太需要原创了。
数据库是如何设计的呢?
其实此是核心

什么啊

谢谢楼主分享

感谢楼主分享

膜拜楼主

感谢楼主分享!

谢谢楼主分享,学习论

??分享...非常精彩
??php+ldap?可以做些什?呢?

谢谢分享啊

看看~!谢谢分享啊·

Wifi网络Web认证系统...
也可以说跟wifi没啥关系...wifi是个环境,主要是解决web认证系统...哈哈哈

引用 10 楼  的回复:

先访问Mysql后访问LDAP,这和Wifi有啥关系?
我看到wifi才近来的

this is 

ldap  是啥,   甚至对楼主的需求都不是很理解,  惭愧!!!!!!!!!

well

小公司可以使用 无线路由 MAC 过滤. 

 

    这个系统的运作流程是什么。认证完了可以做什么?普通员工和访客认证完了以后就能获取哪方面权限呢?原理是基于php+ldap的机制,或者其他什么?

    不好意思,我这个菜鸟是真没看明白什么意思!希望懂这方面细节的高人能把这些比较不好理解和抽象的概念解释得更好理解一些!谢谢!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

2

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

2

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

0

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

0

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

3

2026.01.29

clawdbot ai使用教程 保姆级clawdbot部署安装手册
clawdbot ai使用教程 保姆级clawdbot部署安装手册

Clawdbot是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

25

2026.01.29

clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址
clawdbot龙虾机器人官网入口 clawdbot ai官方网站地址

clawdbot龙虾机器人官网入口:https://clawd.bot/,clawdbot ai是一个“有灵魂”的AI助手,可以帮用户清空收件箱、发送电子邮件、管理日历、办理航班值机等等,并且可以接入用户常用的任何聊天APP,所有的操作均可通过WhatsApp、Telegram等平台完成,用户只需通过对话,就能操控设备自动执行各类任务。

16

2026.01.29

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

8

2026.01.29

俄罗斯Yandex引擎入口
俄罗斯Yandex引擎入口

2026年俄罗斯Yandex搜索引擎最新入口汇总,涵盖免登录、多语言支持、无广告视频播放及本地化服务等核心功能。阅读专题下面的文章了解更多详细内容。

622

2026.01.28

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号