单点登录(一):原理分析

http://blog.csdn.net/pzxwhc/article/details/42584261

一.单点登录概念     

    1.1 概念

    1.2 SSO组成

    1.3 技术实现思路

    1.4单点登录过程


一.单点登录概念
1.1 概念 

单点登录,简称sso,single sign on主要用于多系统的集成,即在多个系统当中,用户只要用 到一个中央服务器登录一次即可访问这些系统中的任何一个,无需多次登录。是目前比较流行的企业业务整合的解决方案之一。
1.2 SSO组成
一般SSO体系主要有3个  (1)多个用户 (2)多个Web应用 (3)SSO认证中心 1个(也就是我们的中央服务器)。其中多个用户访问不同的Web应用,是否需要登录由SSO认证中心来控制。  
1.3 技术实现思路:
1.当用户第一次访问系统A的时候,因为还没有登录,会被引导到认证系统中进行登录;
2.根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--ticket;
3.用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据。
4.应用系统接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性。
5.如果通过校验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。
1.4单点登录过程
CAS(Central Authentication Service)按照字面的意思就是中央认证服务。主要是为Web应用系统提供一种可靠的单点登录解决方案。
CAS主要分为两个部分: CAS server和CAS client 也就是CAS的服务器端和CAS的客户端。同时CAS服务器端需要独立部署,CAS服务器会处理用户名/密码等凭证。
SSO访问流程主要有以下的形式:
1.访问服务:CAS客户端发送请求访问应用系统的服务资源。
2.定向认证:CAS客户端会重定向用户请求到CAS服务器 。   
3.用户认证:用户身份验证。
4.发放票据:CAS服务器会产生一个随机的Service Ticket,并且允许客户端访问。
6.传输用户信息:CAS服务器传输用户认证结果信息给客户端。

例如一个用户还没有登录过任何的系统,如图:

此时用户再登录系统(可能是本系统,可能是其他系统):

文字再解释这个过程:

CAS Client与受保护的客户端应用部署在一起,以Filter方式保护Web应用的受保护资源, 过滤从客户端发来的每一个请求
同时,CAS Client会分析HTTP请求中是否包含请求Service Ticket,如果没有,则说明这个用户是没有经过认证的;于是,CAS Client会重定向用户请求到CAS Server,并且传递Service(要访问的目的资源地址)。
用户认证过程,如果用户提供了正确的Credenties(输入了正确的帐号密码),CAS Server随机生成一个相当长度,唯一,不可伪造的Server Ticket,并且 缓存以待将来认证。并且重定向用户到Service所在地址(附带刚才产生的Service Ticket), 并且为客户端浏览器设置一个Ticket Granted Cookie(TGC)

另外的一种解释:
Step1: 用户第一次访问Biz系统主页http://bizserver/index.jsp ;部署在Biz系统上的CASFilter发现用户尚未登录,将用户重定向的CAS登录界面 https://casserver/cas/servlet/login?service=http://bizserver/index.jsp ,同时在重定向的URL上用service参数将用户的目标地址传给CAS服务器。

Step2:用户在CAS的登录页上输入用户名密码登录,CAS服务器认证通过后,生成一个ticket,并带在目标地址的尾部返回客户端的浏览器redirect:http://bizserver/index.jsp?ticket=casticket.

Step3:客户端浏览器获得CAS服务器的认证应答,取得凭证ticket后,使用重定向的链接http://bizserver/index.jsp?ticket=casticket访问Biz服务

Step4: BizServer上的CASFilter再次过滤访问请求,并获得ticket凭证。Filter将使用该凭证通过URL https://casserver/cas/servlet/validate?service= http://bizserver/index.jsp &ticket=casticket 向CAS认证中心确认对应的服务请求和凭证是否有效。根据CAS服务器返回的结果,如果凭证有效,则CASFilter允许用户进入http://bizserver/index.jsp 所指向的页面;否则,再次重定向到https://casserver/cas/servlet/login?service=http://bizserver/index.jsp 上要求用户进行认证。

补充:
CAS 的SSO实现方式 可以理解为:1个Cookie和N个Session。CAS Server创建cookie,在所有应用认证时使用,各应用通过创建各自的Session来标识用户是否已经登录。
用户在一个应用验证通过后,以后用户在同一个浏览器中访问此应用的时候,客户端应用中的过滤器会在Session中读取用户的信息,所以就不会去CAS Server认证。如果在此浏览器访问别的Web应用的时候,客户端应用中的过滤器在session中读取不到用户信息,就会去CAS Server的login接口认证,但是这个时候CAS Server会读取到浏览器传来的cookie(TGC),所以CAS Server不会要求用户去登录页面登录。

术语解释:
1.TGT(Ticket Grangting Ticket):TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后, CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT ,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。
2.TGC(Ticket-granting cookie): 存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https),是CAS Server用来明确用户身份的凭证。
3.ST(Service Ticket):ST是CAS为用户签发的访问某一service的票据。用户访问service时,service发现用户没有ST,则要求用户去CAS获取ST。用户向CAS发出获取ST的请求,如果用户的请求中包含cookie,则CAS会以此cookie值为key查询缓存中有无TGT,如果存在TGT,则用此TGT签发一个ST,返回给用户。用户凭借ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源。
4.PGT:绑定一个用户的特定服务,使其拥有向CAS Server申请,获得PT的能力。4.PGT(Proxy Granting Ticket):Proxy Service的代理凭据。用户通过CAS成功登录某一Proxy Service后,CAS生成一个PGT对象,缓存在CAS本地,同时将PGT的值(一个UUID字符串)回传给Proxy Service,并保存在Proxy Service里。Proxy Service拿到PGT后,就可以为Target Service(back-end service)做代理,为其申请PT。
5.PGTIOU(Proxy Granting Ticket I Owe You);PGTIOU是CAS协议中定义的一种附加票据,它增强了传输、获取PGT的安全性。
PGT的传输与获取的过程:Proxy Service调用CAS的serviceValidate接口验证ST成功后,CAS首先会访问pgtUrl指向的https url,将生成的 PGT及PGTIOU传输给proxy service,proxy service会以PGTIOU为key,PGT为value,将其存储在Map中;然后CAS会生成验证ST成功的xml消息,返回给Proxy Service,xml消息中含有PGTIOU,proxy service收到Xml消息后,会从中解析出PGTIOU的值,然后以其为key,在map中找出PGT的值,赋值给代表用户信息的Assertion对象的pgtId,同时在map中将其删除。
6.PT(Proxy Ticket): PT是用户访问Target Service(back-end service)的票据。如果用户访问的是一个Web应用,则Web应用会要求浏览器提供ST,浏览器就会用cookie去CAS获取一个ST,然后就可以访问这个Web应用了。如果用户访问的不是一个Web应用,而是一个C/S结构的应用,因为C/S结构的应用得不到cookie,所以用户不能自己去CAS获取ST,而是通过访问proxy service的接口,凭借proxy service的PGT去获取一个PT,然后才能访问到此应用。

TGT、ST、PGT、PT之间关系:
1)ST是TGT签发的。用户在CAS上认证成功后,CAS生成TGT,用TGT签发一个ST,ST的ticketGrantingTicket属性值是TGT对象,然后把ST的值redirect到客户应用。
2)PGT是ST签发的。用户凭借ST去访问Proxy service,Proxy service去CAS验证ST(同时传递PgtUrl参数给CAS),如果ST验证成功,则CAS用ST签发一个PGT,PGT对象里的ticketGrantingTicket是签发ST的TGT对象。
3)PT是PGT签发的。Proxy service代理back-end service去CAS获取PT的时候,CAS根据传来的pgt参数,获取到PGT对象,然后调用其grantServiceTicket方法,生成一个PT对象。


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值