JAVA-SSO单点登录方案整理-第三方登录

SSO方案:
只是记录一个解决方案:(多服务器-五地三活策略)
1:利用-nginx的 ip_hash,去解决,思路就是,把某一台代理过来的客户端信息,单独跟某一台服务器绑定,以后这个ip的所有请求都会分发到绑定的这个服务器,相当于变相的解决了,单点登录。就跟传统的一个服务器系统登录没什么区别了。

这种适合并发量不大的情况下去做,缺点是容易发生单点故障

2:子系统之间同步session信息,实现比较简单,不会出现打单点故障,缺点是非常占用服务器的资源,网络开销非常大,如果子系统非常庞大的话,比如出现网络延迟等等,性能影响非常大。同步工程中,有可能还没有完全同步完信息,其他系统又有登录了,这个时候session信息又改变了

3:利用redis做单点方案(推荐)

A系统登录,保存登录信息  key---value 到redis里去,登录成功之后,把key返回给客户端
然后客户端再去B系统登录的时候,携带从A返回的key,这个时候就可以去redis里查询到登录信息了,就可以登录了。

第三方登录方案:
主要利用OAuth2.0协议完成。

1:发送登录请求
2:重定向到第三方登录的页面(比如qq、微信)

3:输入第三方的用户名密码验证登录(携带一些信息比如 serviceId等之类的)

4:返回一个授权码code ,并且重定向到客户端(如何让QQ知道你的重定向地址?这个地址需要自己申请配置给QQ)

5:拿返回的这个code,并且只能用这个回调地址去发起,获取token令牌(不能随便用地址去换令牌,主要是防止令牌泄露被截取)(这个时候是甲方和第三方之间的内部通讯)

code特点:只能由callback的地址使用

                   失效时间非常短

6:返回令牌-token

7:用这个令牌去换取所能得到的用户信息

 

token令牌实现(推荐JWT):
token特性:1加密2有失效期3可以存储数据

你可能感兴趣的:(分布式架构-容器化时代,java开发)