[原创]用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
==========================================
//****************************************************
// 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;
?>
==========================================
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 "";
}
}
?>
==========================================
复制粘贴?还是原创分享
复制粘贴?还是原创分享
原创分享的哦
好的,骚年... 这贴你别结了,我啦结好了.
引用 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的机制,或者其他什么?
不好意思,我这个菜鸟是真没看明白什么意思!希望懂这方面细节的高人能把这些比较不好理解和抽象的概念解释得更好理解一些!谢谢!