单点登录原理

1、为什么要有单点登录。

以往登录一个系统使用session登录,但是随着系统的完善和优化,模块与模块之间可能存放在不同的服务器,中间使用代理服务器来分发例如:nginx。
但是多服务器是如何共享用户信息的呢?
答案就是单点登录。

2、解决方式。
这里的单点登陆在nginx集群的时候最常用
解决方式:
1、session同步,缺点在每一个服务器上都存在一个session,每个服务器的session都需要同步,但是这种会占用大量的资源。而且在不同的系统之间是不可能共享同一个session的,例如:淘宝和天猫。并且在使用同步session的时候,如果这时候并发访问量比较大的时候,session又可能还没有完全同步,但是请求已经过来,也容易造成数据污染。

2、第三方存储介质。
    首先客户端发出请求给服务器,假设这里使用了分布式集群开发,三个服务器运行的是相同的业务逻辑的war包(可以是不同业务)。
     假设客户端做了登录操作,发送给代理服务器nginx,通过负载均衡的算法,将登录请求转发到了服务器1,服务器1将数据去数据库校验,然后将用户数据发送给store,并以key-value的形式存储,key通常会采用uui的方式生成,而value就是实际的用户数据。
    当存储介质store保存完用户数据后,服务器会将key实际上可以看成是一个uuid返回给客户端,客户端就可以将这个key保存起来了,一般会保存在cookie,现在随着H5的兴起,locatStorage和SessionStorage也会用来保存这个key。
    假设客户端再次发送请求给nginx,nginx将请求转发给了服务器2,这时候通过客户端之前保存的key,就可以去存储介质store中取出存储的用户数据了。就实现了单点登录,实现了跨服务器共享数据。

单点登录原理_第1张图片

常用的一些单点登录的框架:
spring session,spring security,ouah2.0

你可能感兴趣的:(java)