Start SSO: CAS
Start SSO: CAS
我们知道了 Cookie-Based Authentication 实现登录应用的服务端,假设有一个用来进行身份验证的服务端,也就是说把应用中身份验证的功能剥离出来当成一个外在的模块,这种场景要如何实现登录呢?
实际上,上述问题所描述的场景叫做中央认证服务(Central Authentication Service,简称 CAS),下图是 CAS 协议的一种描述。
经过 CAS 协议,我们最终还是在浏览器保存了一个包含 sessionId 的 cookie,应用服务端有一个 session ,以此完成了身份验证,达到了登录的状态。
那么 CAS 内部如何实现的呢?下图清晰的表述了出来,看图中First Access
环节即可。
回归到 SSO 问题上,假设我们这回要去访问第二个应用了,但因为两个应用系统是关联,我们不想再次登录了,该怎么办?
第一次登录是在 CAS Server 上登录然后再跳转到第一个应用系统,那么我们可以这么认为我们其实也登录了 CAS Server。那么再登录第二个系统的时候,我们没有对应的位于 cookie 里的 sessionId 和 服务端的 session ,第二个系统的 CAS Client (一般是 Filter)尝试去请求 CAS Server来验证身份,这个时候 CAS Server 和浏览器保存了登录第一个系统时的状态(TGC 和 TGT ),因此身份认证成功,直接进入应用系统。
上述可看图中First Access to Second Application
环节。