单点登录(SSO,Single Sign On)对我们来说已经不陌生了,一次登录,处处登录。企业旗下都是自己的应用系统,所有的应用系统都使用同一个一级域名,通过不同的二级域名来区分应用系统。例如:百度,百度下面有很多子系统——百度文本库、百度知道等。在我们的体验中,登录了百度帐号,其他子应用系统也就随之登录了。这次,让我们了解下背后实现原理--同域下的单点登录。
同域 SSO 原理设计
-
门户系统设置 Cookie 的 domain 为一级域名 authing.com,这样就可以将门户的 Cookie 共享给所有使用该域名(authing.com)的系统。
-
使用 Spring Session 等技术让所有系统共享 Session。
-
门户系统登录之后,无论是跳转应用一还是应用二,都能通过门户 Cookie 中的 SessionId 读取到 Session 中的登录信息,实现单点登录。
同域 SSO 原理分析
HTTP 协议是无状态的,单个系统的会话由服务端 Session 进行维持,Session 保持会话的原理是通过给浏览器返回 Set-Cookie 请求头,浏览器收到后把包含 Sessionid 的 Cookie 写入浏览器,每次访问都