老师您好,如果我要将分布式会话做成跨域、跨系统的单点登录,还有就是排他登陆应该怎么操作了,谢谢
来源:5-2 缓存设计原则概览
慕神8359304
2019-05-27
1回答
-
龙虾三少
2019-05-27
你好,方案中需要做好几个事情:
可以依赖cookie存储登录标示的id,但是不要依赖cookie去传输sessionid,应该将id从cookie中取出后作为http的request或header的参数传给服务端验证
服务端在不同的系统之间需要共享会话存储,对应的sessionid可以放在集中式的redis中统一管理存取
然后sso需要考虑不同的sso系统之间的domain域名是否一致,比如一个是a.baidu.com,另一个是b.baidu.com因为domain都是baidu.com,自然就可以做到两个子域名间的cookie可以共享了,但若是在不同的domain域名下,比如a.baidu.com,b.sina.com需要sso则需要在用户访问a.baidu.com时发现没有登录态则跳转单点登录授权站login.com,登录授权后生成对应的code和cookie,cookie用于植入客户端浏览器标示login.com这个站点用户已经登录,code用户让客户端重定向到a.baidu.com的一个特定的sso地址上,然后在a.baidu.com对应的地址收到这个客户端转发过来的code后需要通过后端服务向login.com的域名发起对应的code验证,验证成功则生成一个属于a.baidu.com的cookie给客户端,这样客户端就算登录了a.baidu.com,同样的,党用户跳转b.sina.com的时候首先对应站点判断没有登录则跳转login.com,由于之前login.com的cookie已经植入标示登录过了,则直接返回对应的code给客户端重定向到b.sina.com,同样的道理b.sina.com通过code向login.com发起验证,通过后生成自己的cookie
122019-05-27 -
龙虾三少
2020-06-10
已回复
00
相似问题