记一次LDAP内网认证转CURL认证的过程

本文探讨了在教育网环境下,将基于LDAP的认证系统迁移到外网环境时遇到的问题,并提供了三种解决方案:端口映射、反向VPN隧道和CURL模拟验证。最终,CURL方案成功实现了学生验证,避免了教育网和外网网络不稳定带来的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原来使用PHP LDAP库进行认证,要求服务器和LDAP服务器在同一个内网才能连接。且校园网络为 教育网 内网。
原先将该系统服务器放置在内网服务器时,由于教育网问题,微信及其它网络运营商的用户无法直接访问导致大量用户被屏蔽。且现在面临将该系统放到微信上去用的需求,因此将系统迁移到外网环境。
外网环境下没法使用LDAP直连,准备了三套方案:

1、在一台有外网IP的内网机子上做端口映射,将389端口映射到LDAP服务器的389端口 2、做反向VPN隧道,即内网机器通过VPN链接到外网服务器,通过内网机器来链接LDAP 3、用CURL将学生验证从LDAP切换到学生教务系统

方案1:Windows 下的端口转发

>netsh interface portproxy add v4tov4 389 202.115.160.72 389

LDAP链接

$re = true;
$ldap_ip = 'IP被隐藏了';
$ldap_port=389;
$ldap_user='用户名被隐藏了';
$ldap_pwd='密码被隐藏了';
$ldap_conn = ldap_connect($ldap_ip,$ldap_port);
ldap_bind($ldap_conn,$ldap_user,$ldap_pwd);
$dn = 'o=西南科技大学,dc=swust,dc=edu,dc=cn';
$rs = ldap_search($ldap_conn,$dn,'(uid='.$UID.')');
$ls= ldap_get_entries($ldap_conn,$rs);
if($ls['count']==0){
      echo "用户名或密码错误";
      $re=false;
}
$pwd = $ls[0]['userpassword'][0];
if(!$this->ssha_check($Password,$pwd)){
     echo "用户名或密码错误";
     $re=false;
}
ldap_unbind($ldap_conn);
return $re;

结果:失败 原因:外网链接该LDAP转发服务器不稳定,教育网出口不稳定

方案2: 开个虚拟机,在虚拟机里面用VPN链接到外网服务器,外网无法直接连接LDAP服务器,虚拟机无法PING通LDAP服务器。 结果:失败 原因:网络

方案3: 分析教务系统学生登陆请求,用CURL模拟请求实现用户验证: 教务处地址:西南科技大学学生教务处地址

提供CURL封装函数:

function http($url, $param, $data = '', $method = 'GET'){
		$opts = array(
			CURLOPT_TIMEOUT        => 30,
			CURLOPT_RETURNTRANSFER => 1,
			CURLOPT_SSL_VERIFYPEER => false,
			CURLOPT_SSL_VERIFYHOST => false,
		);

		/* 根据请求类型设置特定参数 */
		$opts[CURLOPT_URL] = $url . '?' . http_build_query($param);

		if(strtoupper($method) == 'POST'){
			$opts[CURLOPT_POST] = 1;
			$opts[CURLOPT_POSTFIELDS] = $data;

			if(is_string($data)){ //发送JSON数据
				$opts[CURLOPT_HTTPHEADER] = array(
					'Content-Type: application/json; charset=utf-8',
					'Content-Length: ' . strlen($data),
				);
			}
		}

		/* 初始化并执行curl请求 */
		$ch = curl_init();
		curl_setopt_array($ch, $opts);
		$data  = curl_exec($ch);
		$error = curl_error($ch);
		curl_close($ch);

		//发生错误,抛出异常
		if($error) return false;;

		return  $data;
	}

登陆验证代码

 $html = $this->http('https://ids-swust.fayea.com/cas/login','',['lt'=>'LT-C439184B-D9A0-8824-399D31945DC21C39','username'=>$UID,'password'=>$Password,'service'=>'https://matrix.dean.swust.edu.cn/acadmicManager/index.cfm?event=studentPortal:DEFAULT_EVENT'],'POST');
	    if(strpos($html,'Login Success!')>0){
		    return true;
	    }else{
		    return false;
	    }

结果:成功

附:调查系统链接

转载于:https://my.oschina.net/yanpengquan/blog/467201

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值