系统间账号认证系统同步方案

系统间账号认证系统同步方案

 

基础原理:(基于Web)

浏览器在个请求传递cookie到服务器,服务器对cookie增删改查的操作, 写入JSessionId实现与服务器Session的绑定,保持会话

单机情况下:一个域名,对应一个cookie,对应一个JsessionId,与一个服务器Session会话

 

基于原理解决方案需要解决两个问题:

1. Cookie在不同域名(系统)间的传递问题

2. 服务器Session在不同服务器

 

问题1的解决方案:

cookie中的数据有三个属性:domain、path、name。cookie新增和删除,没有修改选项,name相同,domain以及path不同,当做不同的cookie来处理

又衍生出了两种情况:

在同一个域名以及子域名下面的处理方式:使用domain绑定顶级域名

在不同域名下面的系统的处理方式:通过sso的模式,传递ticket,验证ticket获取用户信息,生成自己的sessionId到cookie中

 

 

问题2的解决方案:

部署在同一台服务器:使用堆外内存,磁盘缓存来实现:ehcache

部署在不同服务器:使用redis、memcache缓存来实现

实现方式:

框架:spring-session、shiro-SessionManager模块、使用redis客户端

自研:修改实现JavaEE关于Session的增删改查,实现分布式回话

 

上述问题比较麻烦的就是不同域名下系统的解决方案:单点登录

底层方案:

JavaEE接入Cas的客户端和服务端实现手动实现单点登录

使用框架:

spring-cas

shiro整合cas

其他方式:

零侵入整合业务系统:https://www.cnblogs.com/baibaomen/p/sso.html

 

Tomcat容器其实实现了对应的Cookie的配置,但是过于依赖容器,在代码中实现,而非在运维层面上实现是更好的选择。

 

参考资料:

单点登录时序图:https://www.cnblogs.com/baibaomen/p/sso-sequence-chart.html

github单点登录资料:https://github.com/baibaomen/BaibaomenSsoLesson

域名之间的cookie共享情况:https://segmentfault.com/a/1190000006932934?utm_source=tag-newest

JavaEE基础教程书籍:《JavaWeb整合开发王者归来》熟悉JavaEE基本对象以及基础流程以及原理,容器只是基础规范的实现

posted @ 2019-06-20 16:02  努力编程的小猪  阅读(746)  评论(0编辑  收藏  举报