1.1 什么是单点登录?
单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
1.2 什么是CAS?
CAS框架:CAS(Central Authentication Service,即:统一认证服务)是实现SSO单点登录的框架。
1.3 CAS框架结构
CAS分为两部分,CAS Server和CAS Client。
CAS Server用来负责用户的认证工作,就像是把第一次登录用户的一个标识
存在这里,以便此用户在其他系统登录时验证其需不需要再次登录。
CAS Client就是我们自己开发的应用程序,需要接入CAS Server端。当用户
访问我们的应用时,首先需要重定向到CAS Server端进行验证,要是原来登陆过,就免去登录,重定向到下游系统,否则进行用户名密码登陆操作。
1.4 CAS中3个术语
Ticket Granting ticket (TGT) :可以认为是CAS Server根据用户名密码生成的一张票,存在Server端。
授权的票据证明,由 CAS Server 通过 SSL 方式发送给终端用户,存放用户身份认证凭证的Cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https),是CAS Server用来明确用户身份的凭证。
Ticket-granting cookie (TGC) :其实就是一个Cookie,存放用户身份信息,由Server发给Client端。
TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成Cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是Cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的Cookie,则CAS以此Cookie值为key查询缓存中有无TGT ,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。
Service ticket (ST) :由TGT生成的一次性票据,用于验证,只能用一次。相当于Server发给Client一张票,然后Client拿着这个票再来找Server验证,看看是不是Server签发的。
ST是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含Cookie,则CAS会以此Cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。
1.5 CAS处理流程
一、CAS处理流程图,如下图所示:
1、 用户访问网站,第一次来,重定向到 CAS Server,发现没有cookie,所以再重定向到CAS Server端的登录页面,并且URL带有网站地址,便于认证成功后跳转,形如 http://cas-server:8100/login?service=http://localhost:8081
注意:service后面这个地址就是登录成功后要重定向的下游系统URL。
2、 在登陆页面输入用户名密码认证,认证成功后cas-server生成TGT,再用TGT生成一个ST。 然后再第三次重定向并返回ST和cookie(TGC)到浏览器
3、浏览器带着ST再访问想要访问的地址http://localhost:8081/?ticket=ST-25939-sqbDVZcuSvrvBC6MQlg5
注意:ticket后面那一串就是ST
4、浏览器的服务器收到ST后再去cas-server验证一下是否为自己签发的,验证通过后就会显示页面信息,也就是重定向到第1步service后面的那个URL
首次登陆完毕。
5、再登陆另一个接入CAS的网站,重定向到CAS Server,server判断是第一次来(但是此时有TGC,也就是cookie,所以不用去登陆页面了),但此时没有ST,去cas-server申请一个于是重定向到cas-server,形如:http://cas-server:8100/login?service=http://localhost:8082 && TGC(cookie) (传目标地址和cookie)
6、cas-server生成了ST后重定向给浏览器http://localhost:8082/?ticket=ST-25939-sqfsafgefesaedswqqw5-xxxx
7、浏览器的服务器收到ST后再去cas-server验证一下是否为自己签发的,验证通过后就会显示页面信息(同第4步)
二、单点登录原理图
上面是一张SSO登录原理图,下面我们来分析一下具体的流程:
1.首先用户访问系统1受保护的资源,系统1发现未登陆,跳转至SSO认证中心,并将自己的参数传递过去
2.SSO认证中心发现用户未登录,将用户引导至登录页面
3.用户输入用户名和密码提交至SSO认证中心
4.SSO认证中心校验用户信息,创建用户与SSO认证中心之间的会话,称为全局会话,同时创建授权令牌
5.SSO认证中心带着令牌跳转会最初的请求地址(系统1)
6.系统1拿到令牌,去SSO认证中心校验令牌是否有效
7.SSO认证中心校验令牌,返回有效,注册系统1的地址
8.系统1使用该令牌创建与用户的会话,称为局部会话,返回给用户受保护资源
9.用户访问系统2受保护的资源
10.系统2发现用户未登录,跳转至SSO认证中心,并将自己的地址作为参数传递过去
11.SSO认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
12.系统2拿到令牌,去SSO认证中心校验令牌是否有效
13.SSO认证中心校验令牌,返回有效,注册系统2地址
14.系统2使用该令牌创建与用户的局部会话,返回给用户受保护资源
通过以上两张图及解释基本能够搞清楚CAS单点登录的原理