单点登录SSO(Single Sign On)

单点登录

定义

就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任

问题一:

需要解决是什么?
1.存储信任
2.验证信任
单点登录在大型网站里使用得非常频繁,例如像阿里巴巴这样的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户会疯掉,各子系统也会为这种重复认证授权的逻辑搞疯掉。实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效性,因此要点也就以下几个:

问题二:

在这里插入图片描述
由图可知,以上方案就是将信任存储在客户端的Cookie里,这样会出现2个新的问题
1.Cookie不安全
2.不能跨域免登
解决办法:
对于第一个问题,一般是通过加密Cookie来处理
对于第二个问题,大型系统会采取在服务端存储信任关系的做法
在这里插入图片描述

以上方案就是要把信任关系存储在单独的SSO系统(暂且这么称呼它)里,说起来只是简单地从客户端移到了服务端,但其中几个问题需要重点解决:

问题三:

1.如何高效存储大量临时性的信任数据
2.如何防止信息传递过程被篡改
3.如何让SSO系统信任登录系统和免登系统
对于问题一:
可以采用类似与redis的分布式缓存的方案,既能提供可扩展数据量的机制,也能提供高效访问
对于问题二:
一般采取数字签名的方法,要么通过数字证书签名,要么通过像md5的方式,这就需要SSO系统返回免登URL的时候对需验证的参数进行md5加密,并带上token一起返回,最后需免登的系统进行验证信任关系的时候,需把这个token传给SSO系统,SSO系统通过对token的验证就可以辨别信息是否被改过。
对于问题三:
可以通过白名单来处理,说简单点只有在白名单上的系统才能请求生产信任关系,同理只有在白名单上的系统才能被免登录。

实现思路(面试问单点登录过程时):

当用户第一次访问应用系统的时候,因为还没有登录,就会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,返回给用户一个认证的凭据–ticket;用户再访问别的应用的时候,就会带上这个ticket,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。如果通过效验,用户就可以在不用再次登录的情况下访问其他模块

发布了53 篇原创文章 · 获赞 42 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_42815122/article/details/85675963
今日推荐