单点登录全过程说明

单点登录过程:

 

 

第一次访问bpmsit.cloudytrace.com           

步骤1:用户访问http://bpmsit.cloudytrace.com/ctbpm-web/,经过他的第一个过滤器(cas提供,在web.xml中配置)AuthenticationFilter。

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

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

 

步骤2:http://bpmsit.cloudytrace.com/ctbpm-web/发现用户没有登录,则返回浏览器重定向地址。 

 

        首先可以看到我们请求http://bpmsit.cloudytrace.com/ctbpm-web/,之后浏览器返回状态码302,然后让浏览器重定向到http://ssosit.cloudytrace.com并且通过get的方式添加参数service,该参数目的是登录成功之后会要重定向回来,因此需要该参数。

标号3:浏览器接收到重定向之后发起重定向,请求http://ssosit.cloudytrace.com。

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

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

步骤5:用户在http://ssosit.cloudytrace.com/cas/login?service=http%3A%2F%2Fbpmsit.cloudytrace.com%2Fctbpm-web%2Fsso%2Flogin的login页面输入用户名密码,提交。

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

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

      Cookie中的CASTGC:向cookie中添加该值的目的是当下次访问ssosit.cloudytrace.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:浏览器从ssosit.cloudytrace.com那里里拿到ticket之后,就根据指示重定向到http://bpmsit.cloudytrace.com/ctbpm-web/sso/login,请求的url就是上面返回的url。

步骤8:http://bpmsit.cloudytrace.com在过滤器中会取到ticket的值,然后通过http方式调用http://ssosit.cloudytrace.com验证该ticket是否是有效的。

步骤9:http://ssosit.cloudytrace.com接收到ticket之后,验证,验证通过返回结果告诉http://bpmsit.cloudytrace.com该ticket有效。

步骤10:http://bpmsit.cloudytrace.com接收到cas-server的返回,知道了用户合法,展示相关资源到用户浏览器上。

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

第二次访问bpmsit.cloudytrace.com 

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

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

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

 

                  

4.3、访问http://bpmsit.cloudytrace.com/ctbpm-web/

标号13:用户在http://bpmsit.cloudytrace.com/正常上网,突然想访问http://esmsit.cloudytrace.com/ctesm-admin/,于是发起访问http://esmsit.cloudytrace.com/ctesm-admin/的请求。

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

上图可以看到,用户请求http://esmsit.cloudytrace.com/ctesm-admin/,然后返回给他一个网址,状态302重定向,service参数就是回来的地址。

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

步骤16:认证中心收到请求,发现TGC对应了一个TGT,于是用TGT签发一个ST,并且返回给浏览器,让他重定向到http://esmsit.cloudytrace.com/ctesm-admin/

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

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

步骤18:http://esmsit.cloudytrace.com/ctesm-admin/获取ticket去认证中心验证是否有效。

 

标号19:认证成功,返回在http://esmsit.cloudytrace.com/ctesm-admin/的session中设置登录状态,下次就直接登录。

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

 单点退出过程:

 未完待续!!

本文版权归作者所有,欢迎转载,请在文章页面明显位置给出原文连接:https://www.cnblogs.com/wynjauu/articles/9360570.html

作者:敲完代码好睡觉

posted @ 2018-08-02 12:25  舞羊  阅读(584)  评论(0编辑  收藏  举报