SSO单点登录------详解首次和二次访问

1 简介

1.1 SSO:单点登录(Single Sign On)

  SSO是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

1.2 CAS中央认证服务 (Central Authentication Server)

  CAS是中央认证服务Central Authentication Service的简称。最初由耶鲁大学的Shawn Bayern 开发,后由Jasig社区维护,经过十多年发展,目前已成为影响最大、广泛使用的、基于Java实现的、开源SSO解决方案。

  2012年,Jasig和另一个有影响的组织Sakai Foundation合并,组成Apereo。Apereo是一个由高等学术教育机构发起组织的联盟,旨在为学术教育机构提供高质量软件,当然很多软件也被大量应用于商业环境,譬如CAS。目前CAS由Apereo社区维护。

1.3 相关网址

CAS的官方网址是:https://www.apereo.org/projects/cas
服务端代码地址: https://github.com/apereo/cas/releases

2 原理

2.1 相关词汇和概念

SSO单点登录------详解首次和二次访问_第1张图片
image.png
2.1.1 TGT

  TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie,写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT ,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。

2.1.2 ST

  ST是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。

2.2 单点登录图示

2.2.1 访问第一个服务

以访问产品维护系统为例。

第一步:访问产品维护系统,产品维护系统会根据Cookie中是否有sessionId判定该请求的用户是否已经登陆过,若没有会判断请求是否携带了ServiceTicket,若没有,将请求重定向到登录中心的登录页面,并在重定向地址中携带用户访问Client1的请求地址。

SSO单点登录------详解首次和二次访问_第2张图片
image.png

第二步:浏览器收到Client的重定向响应
SSO单点登录------详解首次和二次访问_第3张图片
image.png

第三步:请求CAS Server登陆接口,CAS Server检查该请求Cookie中是否有TGT,若无TGT,返回登录页面
SSO单点登录------详解首次和二次访问_第4张图片
image.png

第四步:CAS Server返回给浏览器登录页面,用户输入用户名、密码进行登录
SSO单点登录------详解首次和二次访问_第5张图片
image.png

第五步:CAS Server收到登陆请求,验证成功后,生成ticket,并返回给浏览器重定向到Client1的响应
SSO单点登录------详解首次和二次访问_第6张图片
image.png

第六步:浏览器收到重定向响应
SSO单点登录------详解首次和二次访问_第7张图片
image.png

第七步:再次访问Client1,先验证Cookie,发现依然没有sessionID,发现带有Service Ticket
SSO单点登录------详解首次和二次访问_第8张图片
image.png

第八步:CAS Client向CAS Server发送请求验证ST
SSO单点登录------详解首次和二次访问_第9张图片
image.png

第九步:CAS Server确认ST的正确性,给client1回复验证成功响应。
Client1收到验证成功响应,返回资源给浏览器,并给浏览器Cookie设置sessionId;
SSO单点登录------详解首次和二次访问_第10张图片
image.png

2.2.2 访问第二个服务

访问完第一个服务之后,该用户又访问另一个服务。以访问人员管理系统为例。
第一步:访问Client2人员管理系统,人员管理系统发现请求Cookie中没有sessionId,也没有携带ticket,重定向到CAS Server


SSO单点登录------详解首次和二次访问_第11张图片
image.png

第二步:浏览器接到重定向到CAS Server的响应


SSO单点登录------详解首次和二次访问_第12张图片
image.png

第三步:请求CAS Server,CAS Server发现请求的Cookie中有自己签发的有效TGT,确定该用户已经登陆过了, 于是给请求的Service生成ST,并将请求重定向回Client2
SSO单点登录------详解首次和二次访问_第13张图片
image.png

第四步:浏览器接收到重定向到Client2的请求
SSO单点登录------详解首次和二次访问_第14张图片
image.png

第五步: 浏览器再次请求Client2,带着ST,Client2收到请求和ST,发送请求给CAS Server验证ST


SSO单点登录------详解首次和二次访问_第15张图片
image.png

第六步: CAS Client向CAS Server发送请求验证ST
SSO单点登录------详解首次和二次访问_第16张图片
image.png

第七步: CAS Server确认ST的正确性,给Client2回复验证成功响应。
Client2收到验证成功响应,返回资源给浏览器,并给浏览器Cookie设置sessionId;
SSO单点登录------详解首次和二次访问_第17张图片
image.png

注:感谢同事Su bo 的倾情执笔,也感谢小组成员在该项目上的协同合作才有此篇博文的诞生,技术因分享才变得有意义。

你可能感兴趣的:(SSO单点登录------详解首次和二次访问)