多系统登录的复杂性

学习完整课程请移步 互联网 Java 全栈工程师

本节视频

  • 【视频】项目实战-iToken-单点登录服务-多系统登录的复杂性

概述

web 系统早已从久远的单系统发展成为如今由多系统组成的应用群,面对如此众多的系统,用户难道要一个一个登录、然后一个一个注销吗?就像下图描述的这样

web 系统由单系统发展成多系统组成的应用群,复杂性应该由系统内部承担,而不是用户。无论 web 系统内部多么复杂,对用户而言,都是一个统一的整体,也就是说,用户访问 web 系统的整个应用群与访问单个系统一样,登录/注销只要一次就够了

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

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

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

然而,可行并不代表好,共享 cookie 的方式存在众多局限。

  • 首先,应用群域名得统一;
  • 其次,应用群各系统使用的技术(至少是 web 服务器)要相同,不然 cookiekey 值(tomcatJSESSIONID)不同,无法维持会话,共享 cookie 的方式是无法实现跨语言技术平台登录的,比如javaphppython 系统之间;
  • 第三,cookie 本身不安全。

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

你可能感兴趣的:(多系统登录的复杂性)