sso单点登录


一、 $broker->attach(true);将我们的会话附加到SSO服务器上的用户会话(将用户会话附加到代理会话),
如果没有cookie,就生成,并且生成对应缓存。如果有就return(它就认为也有对应的缓存)

//第一次打开浏览器,(无token)创建token ,Sso端会重定向到客户端原来网站(相当于再次刷新了页面)

//第二次刷新页面, (有cookie->token) 直接return
注:token 就是证明有没有过通信

1.进行验证(感觉没啥意义)
客户端 Broker.php 'checksum' => hash('sha256', 'attach' . $this->token . $this->secret) 和
服务端 Server.php $checksum = $this->generateAttachChecksum($_REQUEST['broker'], $_REQUEST['token']);
return hash('sha256', 'attach' . $token . $broker['secret']);

2.生成回话令牌
return "SSO-{$brokerId}-{$token}-" . hash('sha256', 'session' . $token . $broker['secret']);

3.生成缓存
$this->cache->set($sid, $this->getSessionData('id'));//当前回话id


二、 $user = $broker->getUserInfo();//获取用户信息

1. 客户端 Broker.php $params['sso_session'] =
$checksum = hash('sha256', 'session' . $this->token . $this->secret);
return "SSO-{$this->broker}-{$this->token}-$checksum";
2. 服务端 Server.php

startBrokerSession() //启动代理请求到SSO服务器的会话 (没有缓存就报403)
$sid = $_GET['sso_session']; $linkedId = $this->cache->get($sid); //从缓存读取回话
$this->brokerId = $this->validateBrokerSessionId($sid);


总结:
第一次登陆报错问题:
因为之前肯定在浏览器登陆过,有cookie,(设置保存一小时)

原理,cookie -> 缓存会话id :$this->cache->set($sid, $this->getSessionData('id'));
-> 两个域名访问 存储的缓存会话id 相同,开启这个session-> 去同一个session文件中找sso_user
session 判断是否登录

原文地址:https://www.cnblogs.com/wangyuyanhello/p/13225343.html