关于java单点登录的东西,之前还未毕业的时候学了一些,但是差不多一年过去,忘的也差不多了。前段时间特意找了一个单点登录的视频,又重温了一下。但是这几天回想起来,知识都有点模糊了,所以决定写下这一篇博客,让自己更加清晰一些。
什么是单点登录?
单点登录SSO(Single Sign On)说得简单点就是在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。
单点登录是为了解决什么问题而存在的?
1. 当一个大型系统中有多个小项目的时候,用户访问每个小项目都需要登录,很麻烦。例如:淘宝网站登录后,天猫就无需登录
2. 传统项目是通过在服务器保存session,但在使用nigix时,当把一个浏览器的不同请求分发到不同服务器时,就会出现问题了。
怎么实现
将key/value存储到一个第三方的位置,比如redis、mysql等。
value可以用UUID来生成。
key呢? key其实是存在你的cookie中。这样浏览器不同次访问的话,会有相同的key传到后台。
上边这种情况有一种局限性,如果是跨域呢?
如果跨域,那么用cookie来存信息就会有问题了。
那么该怎么解决呢? 就可以用到token,方案是这样的:
1. 用户登录后将在服务器a生成一个key,同时发送token到用户。
2. 用户再拿着token去服务器b,其他系统可以在用这个token到原来服务器a校验。(token可以存在前端的cookie中,发送请求时可以取出token,然后再发送)
key是可以将token解析的, 解析为用户名密码等。所以key要保存好。