1. 什么是单点登录?
一般来说,大型的企业会有几套应用系统,传统的方案是每个应用实现自己的登录功能,有自己专用的用户数据库,这种就叫做多点登录。多点登录导致同一个企业的多个系统都要一一手工登录,各个系统登录状态互不相认,给用户使用带来了极大的不便,也增加了公司开发和维护的成本和负担。
单点登录(SSO,Single Sign On)则很好地解决了此问题。单点登录的原理是用户只需进行一次登录,就可以访问所有相互信任的应用系统,非常适用大型企业的多应用系统的使用场景。
2. CAS
目前主流的单点登录协议有CAS、Oauth2、SAML等。本文主要讨论的是基于CAS协议的单点登录原理。
CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS 是 耶鲁大学(Yale University)发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法。
CAS的认证流程通过包括几部分参与者:
Client: 通常为使用浏览器的用户
CAS Client: 实现CAS协议的Web应用, 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。
CAS Server: 作为统一认证的CAS服务器,需要独立部署,主要负责对用户的认证工作
2.1. 基于CAS单点登录
基于CAS的单点登录方案大体是:服务器(CAS Server)为 每次登录请求分配一个登录票据,合作模块(CAS Client)拿到该ticket之后,到服务器(CAS Server)验证该ticket是否合法。
2.2. 基于CAS单点注销
单点注销是单点登录的辅助流程,在一个模块执行注销操作即可。单点注销目前只适合用户主动触发的注销行为(如点击页面的注销按钮),其他形式的如会话超时过期之类的则无法触发单点注销。具体流程如下图: