码迷,mamicode.com
首页 > 其他好文 > 详细

SSO单点登录

时间:2020-12-09 12:10:57      阅读:6      评论:0      收藏:0      [点我收藏+]

标签:多个   实现   参考   参考资料   淘宝   mamicode   技术   相互   分布   

一、什么是单点登录

单点登录(Single Sign On),简称SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
对于简单的系统,所有的功能都在一个系统上:
技术图片
对于复杂的功能,为了合理利用资源和降低耦合度,把单系统拆分为多个子系统:
技术图片
在一个子系统登录后,其他子系统也会登录。
比如淘宝和天猫,这是两个系统,但是在使用时,登录了天猫,淘宝也会自动登录。

二、Redis简单介绍

Redis是基于内存,常用作于缓存的一种技术。以key-value的形式存储数据。
Redis实现的是分布式缓存,如果有多台机器的话,所有机器共享一分缓存,缓存具有一致性。

三、多系统登录的问题与解决

1、Session不共享问题

问题

Session是依赖Tomcat的,所以Session是不能共享的,即系统A和系统B的Session是不共享的。

解决:

因为Redis可以实现分布式缓存,因此可以使用Redis来模拟Session。
步骤:

  1. 将登录功能单独抽取出来,做成一个子系统(SSO)
  2. 其他登录登录时,请求SSO进行登录,将返回的token写到Cookie中,下次访问时则把Cookie带上。
    总结:
  • SSO系统生成一个token,并将用户信息存到Redis中,并设置过期时间。
  • 其他系统请求SSO系统进行登录,得到SSO返回的token,写到Cookie中
  • 每次请求时,Cookie都会带上,然后判断是否已经登录。

2、Cookie跨域问题。

问题描述

假如我们现在有两个系统: https://www.test1.comhttps://www.test2.com
我们请求test2时,不会将test1的Cookie带过去。
所以我们请求test1进行登录后,如果将token写入到test1的Cookie中,那么访问test2时还需要重新登录。

解决

假设我们现在有三个系统:
登录系统:https://www.testSSO.com
系统一:https://www.test1.com
系统二:https://www.test2.com

我们请求系统一时,发现没有登录,于是跳转到 https://www.testSSO.com系统进行登录,登录后将token写入到testSSO下,登录成功之后再跳转回系统一。之后我们请求系统二:http://www.test2.com 发现没有登录。于是又跳转到 https://www.testSSO.com ,当我们访问SSO时,携带着token信息,于是便通过登录验证,之后跳转会系统二。

所以可以理解为:SSO认证中心就类似一个中转站。

参考资料:
https://zhuanlan.zhihu.com/p/66037342
https://mp.weixin.qq.com/s?__biz=MzI4Njg5MDA5NA==&mid=2247484359&idx=1&sn=0994c6246990b7ad42a2d3f294042316&chksm=ebd742c6dca0cbd0a826ace13f4d4eeff282052f4a97b31654ef1b3b32f991374f5c67a45ae9&token=1834317504&lang=zh_CN&scene=21#wechat_redirect

SSO单点登录

标签:多个   实现   参考   参考资料   淘宝   mamicode   技术   相互   分布   

原文地址:https://www.cnblogs.com/Silly-Dog/p/14088244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!