前端需要了解的SSO与CAS知识CSD

不管是什么公司,只要产品数量大于一个,那么单点登录势必是绕不过去的一个问题。作为前端程序员,我们对其虽然接触不多,但适当的了解还是必要的。本文就来谈谈单点登录相关的问题。

前置知识

了解SSO,最好具备以下知识。当然,如果不是特别熟,也不影响阅读。

cookie及session

浏览器同源策略及跨域

了解登录系统的构成

什么是SSO与CAS?

SSO

SSO是英文SingleSignOn的缩写,翻译过来就是单点登录。顾名思义,它把两个及以上个产品中的用户登录逻辑抽离出来,达到只输入一次用户名密码,就能同时登录多个产品的效果。

使用SSO的优点很明显:

提升用户体验。就以我厂为例。我厂有两个产品,丁香人才网和丁香园论坛,假如你是我厂用户,肯定无法忍受登录丁香园论坛的时候输入一次用户名密码,登录人才网又要输入一次用户名密码吧?

避免重复开发。假如你是我厂后端,每天任务都饱和的不行,肯定无法忍受到人才网开发一套登录逻辑,到论坛又开发一套登录逻辑吧?

提升安全系数

假如你是我厂运维,发现了一个安全隐患需要紧急修复。你肯定无法忍受给茫茫多的产品后端都发一封邮件,责令修复吧?万一漏了一个呢?

CAS

SSO仅仅是一种架构,一种设计,而CAS则是实现SSO的一种手段。两者是抽象与具体的关系。当然,除了CAS之外,实现SSO还有其他手段,比如简单的cookie。CAS(CentralAuthenticationService)中心授权服务,本身是一个开源协议,分为1.0版本和2.0版本。1.0称为基础模式,2.0称为代理模式,适用于存在非Web应用之间的单点登录。

同域SSO如图,同域SSO是最简单的一种情况。此时,两个产品都是在一个域名下,单点登录是很自然的选择。我们来捋一捋步骤,搞清楚这里的步骤是理解后文的基础,千万不要跳过。

用户访问产品a,向后台服务器发送登录请求。

登录认证成功,服务器把用户的登录信息写入session。

服务器为该用户生成一个cookie,并加入到responseheader中,随着请求返回而写入浏览器。

该cookie的域设定为dxy.cn。

下一次,当用户访问同域名的产品b时,由于a和b在同一域名下,也是dxy.cn,浏览器会自动带上之前的cookie。此时后台服务器就可以通过该cookie来验证登录状态了。

实际上,这种场景就是最简单最传统的登录操作。虽然我们把产品a和b人为分开了,但由于它们在同域上,就算看成是同一产品的不同类目也未尝不可。我们没有设置独立的SSO服务器,因为业务后台服务器本身就足以承担SSO的职能。

同父域SSO

同父域SSO是同域SSO的简单升级,唯一的不同在于,服务器在返回cookie的时候,要把cookie的domain设置为其父域。比如两个产品的地址分别为a.dxy.cn和b.dxy.cn,那么cookie的域设置为dxy.cn即可。在访问a和b时,这个cookie都能发送到服务器,本质上和同域SSO没有区别。

.跨域SSO

可以看到,在上面两种情况下,我们都没有专门设置SSO服务器。但是当两个产品不同域时,cookie无法共享,所以我们必须设置独立的SSO服务器了。这个时候,我们就是通过标准的CAS方案来实现SSO的。

详解CAS

CAS1.0协议定义了一组术语,一组票据,一组接口。

术语:

Client:用户。

Server:中心服务器,也是SSO中负责单点登录的服务器。

Service:需要使用单点登录的各个服务,相当于上文中的产品a/b。

/login:登录接口,用于登录到中心服务器。

/logout:登出接口,用于从中心服务器登出。

/validate:用于验证用户是否登录中心服务器。

/serviceValidate:用于让各个service验证用户是否登录中心服务器。

给大家推荐一个web前端学习群,群里有海量资料,每天都有技术大牛分享最前沿的前端案例,大家一起学习一起进步。




转载请注明:http://www.aierlanlan.com/cyrz/3030.html