Cookie的单点登录的实现方式很简单,但是也问题颇多。例如:用户名密码不停传送,增加了被盗号的可能。另外,不能跨域!

1、基于Cookie的单点登录的回顾

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

将用户名密码加密之后存于Cookie中,之后访问网站时在过滤器(filter)中校验用户权限,如果没有权限则从Cookie中取出用户名密码进行登录,让用户从某种意义上觉得只登录了一次。

该方式缺点就是多次传送用户名密码,增加被盗风险,以及不能跨域。点击这里了解Java如何进行跨域。同时http://www.qiandu.com与http://mail.qiandu.com同时拥有登录逻辑的代码,如果涉及到修改操作,则需要修改两处。

2、统一认证中心方案原理

在生活中我们也有类似的相关生活经验,例如你去食堂吃饭,食堂打饭的阿姨(http://www.qiandu.com)告诉你,不收现金。并且告诉你,你去门口找换票的(http://passport.com)换小票。于是你换完票之后,再去找食堂阿姨,食堂阿姨拿着你的票,问门口换票的,这个票是真的吗?换票的说,是真的,于是给你打饭了。

基于上述生活中的场景,我们将基于Cookie的单点登录改良以后的方案如下:

经过分析,Cookie单点登录认证太过于分散,每个网站都持有一份登陆认证代码。于是我们将认证统一化,形成一个独立的服务。当我们需要登录操作时,则重定向到统一认证中心http://passport.com。于是乎整个流程就如上图所示:

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

第二步:重定向到http://passport.com,输入用户名密码。http://passport.com将用户登录的信息记录到服务器的session中。

第三步:http://passport.com给浏览器发送一个特殊的凭证,浏览器将凭证交给http://www.qiandu.com,http://www.qiandu.com则拿着浏览器交给他的凭证去http://passport.com验证凭证是否有效,从而判断用户是否登录成功

第四步:登录成功,浏览器与网站之间进行正常的访问。

3、Yelu大学研发的CAS(Central Authentication Server)

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

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

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

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

4、CAS的详细登录流程

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

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

4.1、第一次访问http://www.qiandu.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4.2、第二次访问http://www.qiandu.com

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

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

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

4.3、访问http://mail.qiandu.com

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

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

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

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

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

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

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

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

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

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

5、总结

至此,CAS登录的整个过程就完毕了,以后有时间总结下如何使用CAS,并运用到项目中。

单点登录 cas 设置回调地址_单点登录终极方案之 CAS 应用及原理相关推荐

  1. 单点登录 cas 设置回调地址_单点登录(SSO)看这一篇就够了

    背景 在企业发展初期,企业使用的系统很少,通常一个或者两个,每个系统都有自己的登录模块,运营人员每天用自己的账号登录,很方便. 但随着企业的发展,用到的系统随之增多,运营人员在操作不同的系统时,需要多 ...

  2. 单点登录 cas 设置回调地址_单点登录落地实现技术有哪些,有哪些流行的登录方案搭配?...

    实现单点登录说到底就是要解决如何产生和存储那个信任,再就是其他系统如何验证这个信任的有效 性,因此要点也就以下两个:1.存储信任 :2.服务器生产~验证信任 : 3.拿到服务器再次验证. 单点登录的常 ...

  3. 单点登录 cas 设置回调地址_cas客户端流程详解(源码解析)单点登录

    博主之前一直使用了cas客户端进行用户的单点登录操作,决定进行源码分析来看cas的整个流程,以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的,来,贴上示例配置: ...

  4. 单点登录终极方案之 CAS 应用及原理

    转载自  单点登录终极方案之 CAS 应用及原理 Cookie的单点登录的实现方式很简单,但是也问题颇多.例如:用户名密码不停传送,增加了被盗号的可能.另外,不能跨域! 1.基于Cookie的单点登录 ...

  5. 笔记本java设置ip地址_如何设置苹果笔记本IP地址

    在相对于很少使用苹果笔记本的用户来说设置IP地址可能是个难题,下面我将介绍如何设置苹果笔记本IP地址. 1.单击桌面右上角的无线图标,无线网卡自动搜索环境中的无线网络,如下图所示. 2.点击" ...

  6. cas返回mysql数据_单点登录 CAS 5.* - 从数据库获取用户信息 - 4

    前面演示的项目 都是使用的固定用户,现在,可以尝试从数据库获取用户+密码尝试登录, 创建表和数据: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_I ...

  7. Spring Security 入门(3-11)Spring Security 的使用-自定义登录验证和回调地址

    配置文件 security-ns.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...

  8. 微信app支付统一下单设置回调地址php,微信支付配置回调地址

    需要超级管理员帐号登录才可操作 1) 所有使用公众号支付方式发起支付请求的链接地址,都必须在支付授权目录之下: 2) 支付授权目录最多可以设置5个目录 3) 头部要包含http或https,须细化到二 ...

  9. 4g网络设置dns地址_黑群晖nas中tr软件汉化、路由器设置端口转发教程(二)

    一.安装增强汉化web作者最近又更新了,推荐[通过群晖的"任务计划"自动安装及定期自动更新]这个方式安装,更方便,还能自动更新见作者:下载地址见留言,或私信 官方功能介绍:在线查看 ...

  10. uboot 如何设置网关地址_两种网络地址段,如何设置内网和外网一起上?

    一般企业都会有自己内部专用业务网络.及对外的互联业务两个网络,在具体使用过程中,根据业务类型的不同.部门职能的不同而分开使用两种网络. 但在使用过程中总会有特殊情况,就是一台电脑要同时使用两种业务网络 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task08.删除排序链表中的重复元素
  2. 用动图讲解分布式 Raft
  3. 关于DataGridView的数据源绑定字符串两个值得注意的问题
  4. C++其他进制转十进制
  5. java handler的用法_Handler和内部类的正确用法
  6. custompage.width 不能小数吗_数学启蒙,先学分数还是先学小数?
  7. 使用SSL和Spring Security保护Tomcat应用程序的安全
  8. Codeforces Round #277(Div 2) A、B、C、D、E题解
  9. 日历视图的XML属性
  10. 二叉树层序遍历_求二叉树的层序遍历
  11. group by with cube
  12. [PHP] - Laravel - CSRF token禁用方法与排除验证csrf_token的url设置
  13. 虚拟机IP更换后 weblogic无法启动 java.net.BindException: 无法指定被请求的地址
  14. 使用SQL语句操作数据
  15. FPGA的Zynq 7000学习--基于黑金AX7010开发板的Hello World 实验
  16. 什么是变量?变量的命名规则?变量的分类?(问号三连)
  17. GAN入门实例【个人理解】
  18. java禁止夏令时_在指定时区导入日期时间,忽略夏令时
  19. BI(商业智能)的未来?
  20. An unexpected error has been detected by Java Runtime Environment

热门文章

  1. 学习数据库的概念,作用
  2. ESP8266物联网开发入门教程
  3. 信息学奥赛一本通题解
  4. docker视频教程下载
  5. Ubuntu下c语言IDE学习
  6. 微信朋友圈照片格式html,实测:微信朋友圈这样发图最清晰
  7. tftp服务器配置及说明
  8. python 更新pip报错 解决方法大全
  9. 【Unity3D插件】Exploder插件分享《物体爆炸效果插件》
  10. 区块链-公钥生成地址