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

1、学习大纲

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

目录章节:java

  • 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端登陆页面

2、回顾会话机制

Web环境中的会话指一个浏览器与交互系统进行通讯的时间间隔,一般指从注册进入系统到注销退出系统之间所通过的时间,浏览器和服务器之间的会话是经过本地的cookie来实现的,经过下图加深理解:web

浏览器访问流程数据库

1.浏览器在第一次访问Tomcat服务器的时候,Tomcat服务器会在服务端建立session对象,并存储到map中.key是session的id,value是session对象自己.
2.在响应的时候会把session的id经过cookie的方式写到客户端浏览器中.
3.浏览器会在本地的目录中把session的id写入到本地的cookie中.
4.在后续的请求中,都会读取本地的cookie中的内容,并在请求的时候带上对应的cookie.浏览器

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

cookie和session的存储安全

3、回顾登录机制

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

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

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

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

实现了登陆状态的浏览器请求服务器模型以下图描述:session

登录机制

每次请求受保护资源时都会检查会话对象中的登陆状态,只有 isLogin=true 的会话才能访问,登陆机制所以而实现。

4、多系统的复杂性

随着公司的发展,公司内部使用的系统愈来愈多.对于公司来讲是件好事情,起码证实公司在蓬勃发展,可是对于使用系统的员工来讲不是个好事情.
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自己不安全。

所以,咱们须要一种全新的登陆方式来实现多系统应用群的登陆,这就是单点登陆。

做者:叩丁狼教育
连接:https://www.jianshu.com/p/9dc... 来源:简书 著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

相关文章
相关标签/搜索