首页 > 编程知识 正文

cas单点登录 多域名,禅道使用方法-测试使用

时间:2023-05-05 00:25:14 阅读:149129 作者:2263

一、CAS简介和整体流程

CAS是Yale大学发起的开源项目,旨在为web APP应用系统提供可靠的单点登录方法,CAS于2004年12月正式成为JA-SIG项目。 CAS具有以下特征:

【1】开源企业级单点登录解决方案。

【2】CAS Server是需要独立部署的web APP应用程序。

【3】CAS Client支持非常多的客户端,例如Java、 Net、PHP、Perl、Apache、uPortal和Ruby (在此为单点登录系统中的各个web APP应用程序)

在结构上,CAS包括两个部分: CAS服务器和CAS客户端。 CAS Server必须独立部署,主要负责用户身份验证。 cas客户端处理客户端访问受保护资源的请求,并在需要登录时重定向到cas服务器。 下图是CAS最基本的协议过程。

SSO单点登录访问过程主要包括以下步骤:

1 .访问服务: SSO客户端请求访问APP应用提供的服务资源。

2 .定向认证: SSO客户端将用户请求重定向到SSO服务器。

3 .用户认证:用户认证。

4 .发行票证: SSO服务器生成随机的服务Ticket。

5 .票据验证: SSO服务器验证票据服务Ticket的有效性,通过验证后,客户端可以访问该服务。

6 .转发用户信息: SSO服务器验证票据,然后将用户认证结果信息转发给客户端。

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /

基于Cookie的单点登录核心原理:

将用户名密码加密后保存在cookie中,然后在访问网站时通过过滤器(filter )检查用户权限,如果没有权限,则从cookie中取出用户名密码并登录,从某种意义上说,用户只能登录一次

这种方式的缺点是多次发送用户名和密码,会增加被盗风险,无法跨越域。 www.qiandu.com和mail.qiandu.com同时具有登录逻辑代码,涉及修改操作时需要修改两处。

http://www.Sina.com/http://www.Sina.com /

在生活中我们也有过类似的生活经历。 例如,你去食堂吃饭,在食堂吃饭的阿姨(www.qiandu.com)告诉你不收现金。 然后去门口换票(passport.com)告诉我换票。 于是,换了票后,去找食堂的阿姨。 食堂阿姨拿着你的票,对在门口换票的人说,这张票是真的吗? 换了票就说是真的,给你做饭了。

基于上述生活中的场景,对基于Cookie的单点登录进行改进后的方案如下。

经过分析,Cookie单点登录认证太分散了,每个网站都有登录认证码。 因此我们统一认证,形成独立的服务。 如果需要登录操作,请重定向至统一身份验证中心http://passport.com。 结果,整个过程如上图所示。

第一步:用户进入www.qiandu.com。 过滤器判断用户是否已登录,如果没有登录,则重定向到网站http://passport.com (302 )。

重定向至步骤passport.com,然后输入用户名和密码。 passport.com将用户登录的信息记录在服务器的session中。

步骤3:passport.com向浏览器发送特殊证书,浏览器将证书传递给www.qiandu.com,www.qiandu.com拿着浏览器传递的证书前往passport.com验证证书是否有效

步骤4 :成功登录,在浏览器和网站之间进行正常访问。

3358 www.Sina.com/http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /

Authentication Server)

下面就以耶鲁大学研发的CAS为分析依据,分析其工作原理。首先看一下最上层的项目部署图:

      

部署项目时需要部署一个独立的认证中心(cas.qiandu.com),以及其他N个用户自己的web服务。

认证中心:也就是cas.qiandu.com,即cas-server。用来提供认证服务,由CAS框架提供,用户只需要根据业务实现认证的逻辑即可。

用户web项目:只需要在web.xml中配置几个过滤器,用来保护资源,过滤器也是CAS框架提供了,即cas-client,基本不需要改动可以直接使用。

 

 

二、详细登录流程

上图是3个登录场景,分别为:第一次访问www.qiandu.com、第二次访问、以及登录状态下第一次访问mail.qiandu.com。

下面就详细说明上图中每个数字标号做了什么,以及相关的请求内容,响应内容。

1、第一次访问www.qiandu.com

标号1:用户访问http://www.qiandu.com,经过他的第一个过滤器(cas提供,在web.xml中配置)AuthenticationFilter。

      过滤器全称:org.jasig.cas.client.authentication.AuthenticationFilter

      主要作用:判断是否登录,如果没有登录则重定向到认证中心。

标号2:www.qiandu.com发现用户没有登录,则返回浏览器重定向地址。

      

      首先可以看到我们请求www.qiandu.com,之后浏览器返回状态码302,然后让浏览器重定向到cas.qiandu.com并且通过get的方式添加参数service,该参数目的是登录成功之后会要重定向回来,因此需要该参数。并且你会发现,其实server的值就是编码之后的我们请求www.qiandu.com的地址。

标号3:浏览器接收到重定向之后发起重定向,请求cas.qiandu.com。

标号4:认证中心cas.qiandu.com接收到登录请求,返回登陆页面。

      

      上图就是标号3的请求,以及标号4的响应。请求的URL是标号2返回的URL。之后认证中心就展示登录的页面,等待用户输入用户名密码。

标号5:用户在cas.qiandu.com的login页面输入用户名密码,提交。

标号6:服务器接收到用户名密码,则验证是否有效,验证逻辑可以使用cas-server提供现成的,也可以自己实现。

      

      上图就是标号5的请求,以及标号6的响应了。当cas.qiandu.com即csa-server认证通过之后,会返回给浏览器302,重定向的地址就是Referer中的service参数对应的值。后边并通过get的方式挟带了一个ticket令牌,这个ticket就是ST(数字3处)。同时会在Cookie中设置一个CASTGC,该cookie是网站cas.qiandu.com的cookie,只有访问这个网站才会携带这个cookie过去。

      Cookie中的CASTGC:向cookie中添加该值的目的是当下次访问cas.qiandu.com时,浏览器将Cookie中的TGC携带到服务器,服务器根据这个TGC,查找与之对应的TGT。从而判断用户是否登录过了,是否需要展示登录页面。TGT与TGC的关系就像SESSION与Cookie中SESSIONID的关系。

      TGT:Ticket Granted Ticket(俗称大令牌,或者说票根,他可以签发ST)

      TGC:Ticket Granted Cookie(cookie中的value),存在Cookie中,根据他可以找到TGT。

      ST:Service Ticket (小令牌),是TGT生成的,默认是用一次就生效了。也就是上面数字3处的ticket值。

标号7:浏览器从cas.qiandu.com哪里拿到ticket之后,就根据指示重定向到www.qiandu.com,请求的url就是上面返回的url。

      

标号8:www.qiandu.com在过滤器中会取到ticket的值,然后通过http方式调用cas.qiandu.com验证该ticket是否是有效的。

标号9:cas.qiandu.com接收到ticket之后,验证,验证通过返回结果告诉www.qiandu.com该ticket有效。

标号10:www.qiandu.com接收到cas-server的返回,知道了用户合法,展示相关资源到用户浏览器上。

      

      至此,第一次访问的整个流程结束,其中标号8与标号9的环节是通过代码调用的,并不是浏览器发起,所以没有截取到报文。

2、第二次访问www.qiandu.com

上面以及访问过一次了,当第二次访问的时候发生了什么呢?

标号11:用户发起请求,访问www.qiandu.com。会经过cas-client,也就是过滤器,因为第一次访问成功之后www.qiandu.com中会在session中记录用户信息,因此这里直接就通过了,不用验证了。

标号12:用户通过权限验证,浏览器返回正常资源。

3、访问mail.qiandu.com

标号13:用户在www.qiandu.com正常上网,突然想访问mail.qiandu.com,于是发起访问mail.qiandu.com的请求。

标号14:mail.qiandu.com接收到请求,发现第一次访问,于是给他一个重定向的地址,让他去找认证中心登录。

      

      上图可以看到,用户请求mail.qiandu.com,然后返回给他一个网址,状态302重定向,service参数就是回来的地址。

标号15:浏览器根据14返回的地址,发起重定向,因为之前访问过一次了,因此这次会携带上次返回的Cookie:TGC到认证中心。

标号16:认证中心收到请求,发现TGC对应了一个TGT,于是用TGT签发一个ST,并且返回给浏览器,让他重定向到mail.qiandu.com

      

可以发现请求的时候是携带Cookie:CASTGC的,响应的就是一个地址加上TGT签发的ST也就是ticket。

标号17:浏览器根据16返回的网址发起重定向。

标号18:mail.qiandu.com获取ticket去认证中心验证是否有效。

标号19:认证成功,返回在mail.qiandu.com的session中设置登录状态,下次就直接登录。

标号20:认证成功之后就反正用想要访问的资源了。

      

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。