单点登录认证原理及跨域cookie共享

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单点登录认证原理及跨域cookie共享相关的知识,希望对你有一定的参考价值。

参考技术A 单点登录认证,在系统配置单点登录拦截器,拦截所有请求。在浏览器中输入系统url,因为设置了所有请求拦截,所有请求都进入这个拦截器中。自定义一个cookie名称,比如为sso.xb.com, 第一次访问时servletRequest里无cookies,这时会网址重定向到设置的单点登录页面,进行单点认证登录。登录完成后跳转至当前系统,这时浏览器含有一个sso.xb.com的cookie。如果是前后端一体的项目,满足http的同源策略,则该cookie是共享的。跳转至当前系统时拦截器再次拦截到到请求,将该cookie的value作为key,用户信息作为value,存放在Map中,注意:这里Map是非线性安全的,保证每个线程获取的用户信息一致。这个过程就是单点登录的基本原理了。

手头负责的一个项目有幸成为公司零售平台的一环。使用单点登录作为统一认证。今天遇到了一个问题。我在本地开发时,单点登录认证成功后,后面再进行restful请求时后端能捕捉到sso.xb.com这个cookie,但嵌套了零智平台的script后发现单点登录成功后刷新页面又跳到单点登录页面,很好奇是什么原因造成的。仔细追踪发现,不嵌套零智平台的script脚本单点登录是正常的。加了后就出现这个问题。

这是什么原因造成的呢?

后面发现http遵守同源策略,同源策略可参考阮老师 这篇文章 ,同源策略告诉我们,ajax或Promise请求时会携带同源cookie,非同源项目,则存在跨域问题,需要设置在ajax或XMLHttpRequest里设置 withCredentials 为true,后端设置header的方式来让请求携带不同源cookie,当然这个属性对同源请求没有任何影响, 会被自动忽略, 因为我的系统嵌套在零智系统里,所以按常规处理是共享cookie的,这就是为何添加了零智平台的script后单点登录认证失败的原因。解决的办法很简单,采用CORS标准,即可解决我的问题,CORS详解参考阮老师 这篇文章 。

综上所述:解决跨域问题 必须给跨域url加个头信息Origin和Access-Control配置 这样表示即表示服务器(零智平台后台)明确许可,零智平台的Cookie可以包含在请求中,一起发给服务器 (本系统)。

以上是关于单点登录认证原理及跨域cookie共享的主要内容,如果未能解决你的问题,请参考以下文章

两个系统之间怎么实现单点登录?

java web应用如何实现单点登录

sso单点登录之跨域cookie共享 (跨域缓存共享)

25期 单点登录与CAS

Spring Security基于Oauth2的SSO单点登录怎样做?一个注解搞定

深入理解跨域SSO(单点登录)原理与技术