单点登录

传统系统登录

在企业发展初期,公司通常只有一个web系统,web系统自身包含登录模块,用户使用自己的账号登录系统,很方便。下图表示传统系统登录方案:


image.png

随着企业的发展,公司的web系统越来越多,每个系统都包含各自的登录模块。可以想象下用户进入每个系统都需要登录,登出也要一个个登出,非常影响用户体验。下图表示传统多系统登录方案:

image.png

传统系统登录的改进

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

我们都知道用户每次请求系统,都会携带浏览器上面的cookie(包含sessionId)信息作为请求头发送到系统后端,后端通过sessionId判断用户是否登录。

在此提出一个设想,如果多系统的session是共享的是不是问题就解决了?但是我怎么获取到cookie里面sessionId呢?众所周知,不同域下的cookie是没办法共享的,那是不是可以在用户登录完成的时候将cookie写到顶级域名上(顶级域名可以被所有子域名共享,例如share.com可以被web1.share.com和web2.share.com共享)

但是这种改进方式存在着一些不足之处:

  • 限制同一个顶级域名,如果有其他不同顶级域名系统接入进来,必需要更改该域名,例如文web3.test.com;
  • 对于session共享,难以做到各个系统统一存放session信息(权限);
  • 每个系统包含登录模块,各自开发,造成人力资源浪费。

初始单点登录

为了解决传统登录系统带来的复杂度问题,单点登录应运而生。单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

单点登录将登录模块抽离出来成为一个统一认证平台,应用系统无需开发登录模块,只需简单接入统一认证平台。下面是单点登录示意图:


image.png

我们将在下一篇通过以CAS作为代表,分析下单点登录是怎么实现的原理(当然也可以通过OAuth2.0 Saml2.0 OpenID等实现单点登录)。

下一篇:CAS设计原理

你可能感兴趣的:(单点登录)