不管是什么公司,只要产品数量大于一个,那么单点登录势必是绕不过去的一个问题。作为前端程序员,我们对其虽然接触不多,但适当的了解还是必要的。本文就来谈谈单点登录相关的问题。
前置知识了解SSO,最好具备以下知识。当然,如果不是特别熟,也不影响阅读。
cookie及session浏览器同源策略及跨域了解登录系统的构成什么是SSO与CAS?
SSOSSO是英文SingleSignOn的缩写,翻译过来就是单点登录。顾名思义,它把两个及以上个产品中的用户登录逻辑抽离出来,达到只输入一次用户名密码,就能同时登录多个产品的效果。
打个比方,SSO和我们去迪士尼玩时购买的通票很像。
我们只要买一次通票,就可以玩所有游乐场内的设施,而不需要在过山车或者摩天轮那里重新买一次票。在这里,买票就相当于登录认证,游乐场就相当于使用一套SSO的公司,各种游乐设施就相当于公司的各个产品。
使用SSO的优点很明显:
提升用户体验:就以我厂为例。我厂有两个产品,丁香人才网和丁香园论坛,假如你是我厂用户,肯定无法忍受登录丁香园论坛的时候输入一次用户名密码,登录人才网又要输入一次用户名密码吧?避免重复开发:假如你是我厂后端,每天任务都饱和的不行,肯定无法忍受到人才网开发一套登录逻辑,到论坛又开发一套登录逻辑吧?提升安全系数:假如你是我厂运维,发现了一个安全隐患需要紧急修复。你肯定无法忍受给茫茫多的产品后端都发一封邮件,责令修复吧?万一漏了一个呢?综合看来,SSO不仅是有用的,而且是必要的。
CASSSO仅仅是一种架构,一种设计,而CAS则是实现SSO的一种手段。两者是抽象与具体的关系。当然,除了CAS之外,实现SSO还有其他手段,比如简单的cookie。
CAS(CentralAuthenticationService)中心授权服务,本身是一个开源协议,分为1.0版本和.0版本。1.0称为基础模式,.0称为代理模式,适用于存在非Web应用之间的单点登录。本文只涉及CAS1.0,下文中将详细介绍。
SSO的演进与分类下面详述一下各种场景下的SSO,它们之间是逐步升级,逐步复杂化的关系。
1.同域SSO如图,同域SSO是最简单的一种情况。
此时,两个产品都是在一个域名下,单点登录是很自然的选择。我们来捋一捋步骤,搞清楚这里的步骤是理解后文的基础,千万不要跳过。
用户访问产品a,向后台服务器发送登录请求。登录认证成功,服务器把用户的登录信息写入session。服务器为该用户生成一个cookie,并加入到responseheader中,随着请求返回而写入浏览器。该cookie的域设定为