• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php透过统一发放tickets实现单点登陆SSO功能

php 搞代码 4年前 (2022-01-24) 39次浏览 已收录 0个评论

php通过统一发放tickets实现单点登陆SSO功能

站点a,站点b,站点c,分别跨域,站点b当做统一认证中心,站点a,站点c登录请求转发到站点b,站点b当做统一登录,注册中心,也称第三方身份认证中心;用户从不同站点登录到第三方认证中心,完成登录验证后,会生成一个包含用户登录信息的加密key,并且生成多个不同子应用的带加密key的引导页面,用户可以自由选择进入子应用引导页,完成子页面认证,从而无需分别登录子应用的登陆入口了,看效果:

通过a站点登录,登录成功后进入第三方登录引导界面:

通过按钮,附加统一的key,进入a站引导中心

通过按钮,附加统一的key,进入c站引导中心

已经实现b站点代理登陆,实现a,c站点登陆了,只要b中心,添加多个子站点列表,就可以实现一个登录,注册中心,一个key实现所有子应用自动登陆,替代了传统子应用单独登陆的问题,简化了用户操作流程!

公共函数

<?phpfunction chksecret($secret){	$key=decode($secret);	$arr = explode(",",$key);	if(isset($arr[3]) && $arr[3]=="verifyok"){				$_SESSION['username']=$arr[1];		$_SESSION['login']=$arr[3];			}else{	    $url=gethost();		echo "<script>alert('登陆失败!');window.location.href='".$url."';</script>";	}}function gethost(){	return "http://".$_SERVER['HTTP_HOST'];}function chklogin(){	if(isset($_SESSION['login']) && $_SESSION['login']=='verifyok'){			}else{	    $host=gethost();		header("location:$host");	}}function decode($string = '', $skey = 'lmj951753') {    $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2);    $strCount = count($strArr);    foreach (str_split($skey) as $key => $value)        $key  $value)        $key 

a站登录入口:

	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">	a站点<body>	

这是a站

用户名:

密 码:

a站引导页:

<?phprequire_once('function.php');session_start();$secret=isset($_GET['key'])?trim($_GET['key']):'';if($secret){	chksecret($secret);}else{	chklogin();}?>	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">	登陆引导中心<body>	

欢迎回来!这里是A站点<?php echo $_SESSION['username'] ?>

管理中心   退出

sso登陆中心:

<?phpheader("Content-type:text/html;charset=utf-8");$refer=$_SERVER['HTTP_REFERER'];$username=isset($_POST['username'])?trim($_POST['username']):'';$password=isset($_POST['password'])?trim($_POST['password']):'';if(empty($username) || empty($password)){	gob

本文来源gao!%daima.com搞$代*!码$网3

搞代gaodaima码ack($refer);}$application=array(//根据子站点需要,添加应用列表 array('name'=>'进入A应用','url'=>'http://www.a.com/'), array('name'=>'进入C应用','url'=>'http://www.c.com/'));if($username=="admin" && $password=="123456"){ $str=time().','.$username.",".$password.",verifyok,".$refer; $key=encode($str); echo "登陆成功!".$username.'
'; foreach ($application as $k => $v) { if($refer==$v['url']){ echo "".$v['name']."  "; }else{ echo "".$v['name']."  "; } }}else{ echo "<script>alert('登陆失败!');history.go(-1);</script>"; exit();}function goback($refer){ header("Location:$refer"); exit();}function decode($string = '', $skey = 'lmj951753') { $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2); $strCount = count($strArr); foreach (str_split($skey) as $key => $value) $key $value) $key

c站作为子站点和a站逻辑结构差不多,就不列举了,一个简单的基于php实现的sso登陆认证就完成了


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php透过统一发放tickets实现单点登陆SSO功能

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址