SSO单点登录教程(一)多系统的复杂性

作者:蓝雄威 叩丁狼教育高级讲师
版权所有,转载请注明出处

一、学习大纲

1.回顾会话机制和登录机制. 因为学习单点登录需要对Cookie和Session有较深的理解,所以我们会先回顾知识.
2.多系统的复杂性带来的问题,我们如何解决这些问题?通过这个问题引出单点登录的需求.
3.自己动手写单点登录的服务端和客户端,通过这个案例加深对单点登录的理解.
4.学习使用开源的单点登录框架CAS,我们使用cas-overlay-template模板来搭建CAS 服务端
5.搭建CAS的客户端.我们需要学习普通项目集成CAS客户端以及SpringBoot项目集成CAS客户端.

目录章节:

  • SSO单点登录教程(一)多系统的复杂性
  • SSO单点登录教程(二)单点登录流程分析
  • SSO单点登录教程(三)单点注销流程分析
  • SSO单点登录教程(四)自己动手写SSO单点登录服务端和客户端
  • SSO单点登录教程(五)自己动手写SSO单点注销服务端和客户端
  • SSO单点登录教程(六)CAS-简介&配置https
  • SSO单点登录教程(七)CAS-搭建CAS Server服务端(静态认证)
  • SSO单点登录教程(八)CAS-搭建CAS Server服务端(JDBC认证)
  • SSO单点登录教程(九)CAS-搭建CAS Client客户端
  • SSO单点登录教程(十)CAS-自定义CAS Server端登录页面

二、回顾会话机制

Web环境中的会话指一个浏览器与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间,浏览器和服务器之间的会话是通过本地的cookie来实现的,通过下图加深理解:
浏览器访问流程
1.浏览器在第一次访问Tomcat服务器的时候,Tomcat服务器会在服务端创建session对象,并存储到map中.key是session的id,value是session对象本身.
2.在响应的时候会把session的id通过cookie的方式写到客户端浏览器中.
3.浏览器会在本地的目录中把session的id写入到本地的cookie中.
4.在后续的请求中,都会读取本地的cookie中的内容,并在请求的时候带上对应的cookie.

服务端的session和客户端的cookie如何存储的,请看下面这张图:
cookie和session的存储

三、回顾登陆机制

有了会话机制,登录状态就好明白了,我们假设浏览器第一次请求服务器需要输入用户名与密码验证身份,服务器拿到用户名密码去数据库比对,正确的话说明当前持有这个会话的用户是合法用户,应该将这个会话标记为“已授权”或者“已登录”等等之类的状态,既然是会话的状态,自然要保存在会话对象中,Tomcat在会话对象中设置登录状态如下:

  HttpSession session = request.getSession();
  session.setAttribute("isLogin", true);

用户再次访问时,tomcat在会话对象中查看登录状态:

    HttpSession session = request.getSession();
    session.getAttribute("isLogin");

实现了登录状态的浏览器请求服务器模型如下图描述:
登陆机制
每次请求受保护资源时都会检查会话对象中的登录状态,只有 isLogin=true 的会话才能访问,登录机制因此而实现。

四、多系统的复杂性

随着公司的发展,公司内部使用的系统越来越多.对于公司来说是件好事情,起码证明公司在蓬勃发展,但是对于使用系统的员工来说不是个好事情.
1.每个系统都需要记住对应的账号和密码,如果有十个系统,意味员工需要记忆十套的账号密码,要记忆这些太痛苦了.所以很多员工的会把每个系统的账号密码都设置成一样的.
2.如果同时要使用CRM系统,WMS系统,OA系统,用户需要登录三次.
3.如果不使用了,还需要分别在三个系统中依次的注销.
用户在多系统下的操作

有没有这样的功能:我只需要登录一次,公司里面所有的系统都可以使用.只需要注销一次,所有的系统都退出登录了.如果能实现这样的功能就非常好了.我们理想的模型如下图:
应用群

虽然单系统的登录解决方案很完美,但对于多系统应用群已经不再适用了,为什么呢?

单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器与服务器之间维护会话状态。但cookie是有限制的,这个限制就是cookie的域(通常对应网站的域名),浏览器发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie.
多系统的cookie
对应的cookie和session存储如下图:
多系统的cookie和session存储

既然这样,为什么不将web应用群中所有子系统的域名统一在一个顶级域名下,例如“*.baidu.com”,然后将它们的cookie域设置为“baidu.com”,这种做法理论上是可以的,甚至早期很多多系统登录就采用这种同域名共享cookie的方式。

然而,可行并不代表好,共享cookie的方式存在众多局限。首先,应用群域名得统一;其次,应用群各系统使用的技术(至少是web服务器)要相同,不然cookie的key值(tomcat为JSESSIONID)不同,无法维持会话,共享cookie的方式是无法实现跨语言技术平台登录的,比如java、php、.net系统之间;第三,cookie本身不安全。

因此,我们需要一种全新的登录方式来实现多系统应用群的登录,这就是单点登录。


展开阅读全文

没有更多推荐了,返回首页