前言
【sso单点登录】sso,Single Sign On,单点登录。
简单来说,就是当我们有多个系统时,我们每个系统都需要单独登录非常麻烦,那么我们去单独做一个登录系统,我们叫做sso,这个登录系统可以登录多个其他系统,并且访问多个系统只需要登录一次。
文章图片
一般登录机制
一般我们系统使用session和cookie作为我们的登录认证,这里不过多讲述,而sso方式就是利用session和cookie做文章,达到我们单点登录的目的。
同域的单点登录机制
简单来说,同域下两个系统分别属于同一根域名,如app1.a.com和app2.a.com都属于根域名a.com。而我们创建一个sso系统域名为sso.a.com也同属于a.com。
我们登录sso系统会产生一对session和cookie,但是产生的session和cookie但是对其他系统不起作用。
首先,我们设置sso系统产生的cookie作用域是根域,这样,我们在请求a.com下的域名时也会带着作用域是根域的cookie请求。
文章图片
如上图,百度翻译cookies中有作用域为fanyi.baidu.com的cookie,也有作用域为.baidu.com的cookie,而打开百度翻译网站时不需要登录直接认证我的百度账号就是依赖于作用域为.baidu.com的cookie。
打开app1.a.com网址带着sso.a.com的cookie还不够,到了app1.a.com后台,对于传输过来的cookie在后台没有登记还是没用。
这需要我们将所有系统后台的session共享,共享session的方式有很多,如Spring-Session。那么同域下单点登录就完成了。
文章图片
不同域下的单点登录
CAS,Central Authentication Service,集中认证服务。
直接看图
文章图片
1.当用户访问应用程序时,其他系统检测到未认证,便重定向到cas登录界面。
2.用户输入用户名和密码,cas在后台认证是否为合法用户,当认证通过后,返回浏览器cookie。
3.浏览器带着ticket再次请求应用程序,应用程序通过安全链接请求cas ticket是不是被认证过的,若是设置其登录在本系统下的登录状态并返回本系统cookie。
4.当用户访问第二个系统时,第二个系统并未检测到其登录状态,同样重定向到cas,cas中已经检测到已登录,便返回ticket,浏览器带着ticket请求第二个系统,第二个系统也通过安全链接请求cas ticket是否通过认证。然后再返回第二个系统的cookie。
推荐阅读
- 大公司为什么禁止SpringBoot项目使用Tomcat()
- intellij-idea|解决MAC下应用程序“IntelliJ IDEA”无法打开(JetBrains全家桶同理)
- 效率|JetBrains IntelliJ IDEA 优化教程
- 开源|IntelliJ IDEA、.NET 工具变贵,JetBrains 宣布全家桶涨价!
- 公司要上监控,Zabbix 和 Prometheus 怎么选(这么选准没错!)
- vue.js|Vue基础知识总结 5(vue实现树形结构)
- MyBatis|Springboot整合Mybatis-plus
- tomcat|ajax跨域的几种解决方案
- LeetCode|每日一题 leetcode 825. 适龄的朋友 java题解