单点登录(SingleSignOn,SSO)就是用户完成一次应用系统登录,便可以免登访问多个其它应用系统,这里所说的应用系统是相互信任的。
通常SSO都是企业内部多个应用之间,一个企业一般有一个*域名,应用系统使用二级域名来区分,只要实现了cookie在二级域名之间共享,那就实现了一次登录,到处免登。
比如*域名为 .star.com,现有app1.star.com,app2.star.com,两个应用都有自己(登录鉴权等)拦截操作,拦截这部分在代码形态上是可以单独剥离出来的。
此时可以单独部署一个用来登录鉴权的cas.star.com,未登录拦截时跳转cas.star.com发起登录,也可以直接由应用自己发起登录操作,这里就以应用自己发起登录操作。
只需解决两个问题:
1.在app1或app2登录完成后,写入浏览器cookie,域名设置为star.com,这样二级域名下的应用都可以共享这个cookie。
2.cookie关联的session要写入公共中间件,通常使用redis保存<sessionId,attrs>,以便session可以在多个应用间共享。
画个图比较清晰一些,这就是同域下共享cookie的方案,但是不同域之间cookie是无法共享的,所以有了cas的解决方案,算是本方案的一个升级,本质上还是如何实现session共享的问题。