jasig cas笔记(一):基础(非代理)认证流程
来源:互联网 发布:爬虫为什么用python 编辑:程序博客网 时间:2024/06/17 07:26
单点登录的概念不再赘述。而关于jasig cas 的认证流程,其实十分简单明了,直接上图:
上图中几个角色分别为:user(用户)、browser(浏览器)、cas server(jasig cas认证服务)、(app1)应用1、(app2)应用2。
一、两个关键元素:ST、TGC
ST:即service ticket;用于验证用户认证状态的一种凭证。当用户请求某个应用的资源时,若该用户尚未认证,则在用户输入用户名密码进行身份认证,认证成功cas服务会返回一个ticket,访问应用的时候会在url带上这个ticket去cas进行验证,验证有效则允许访问应用资源。
TGC:即ticket-granting cookie;是一个由cas服务设置的cookie。TGC维护了客户端和cas服务的信任关系,当用户认证通过,则cas会在浏览器设置一个TGC,下次用户再次请求时则只需带上TGC,只要此TGC尚未失效,都无需重新认证,否则需再次进行用户名密码登录认证。简单来说,就是让客户机和cas服务建立一个会话(session),会话失效之前都无需重复认证,相当于平时常说的sessionid。
二、主要流程:
下面是基于用户操作的流程
1.用户请求访问app1,在地址栏输入http://app1.pt.com ,如果用户已经认证过且跟app1之间的会话尚未过期,则直接进入app1;如果用户尚未认证或与app1会话已失效,则重定向到cas服务:http://cas.com/login?service=http://app1.pt.com/authc (此处authc是app1中指定的验证ticket的地址);
2.用户的浏览器发起get请求:http://cas.com/login?service=http://app1.pt.com/authc ,cas服务会向用户展现登录form;
3.用户输入用户名密码,提交至cas服务进行认证。认证不通过则重定向回刚刚的登录form,认证通过则由cas服务则设置一个cookie(TGC)。
4、cas生成一个ticket(ST),并重定向至http://app1.pt.com/authc?ticket=ST-1818181 ;
5.浏览器向app1发出get请求:http://app1.pt.com/authc?ticket=ST-1818181 ,app1接收到ticket后再发送get请求到cas服务验证ST的合法性:http://cas.com/serviceValidate?service=http://app1.pt.com/authc?ticket=ST-1818181 ,cas服务进行ST验证成功后,返回一个状态为200的xml格式数据,浏览器就此确认ST验证成功。响应浏览器200OK,并在浏览器设置app1sessionid;
6.浏览器带上app1的sessionid则可访问app1的数据资源;
7.此时如果用户想获取同样被cas维护着的app2的数据资源:http://app2.pt.com/ ,将会重定向到http://cas.com/login?service=http://app2.pt.com/authc 并带上第三步设置的TGC,再和app1类似的重复第四步到第六步,获取app2的资源。要注意的是,cas为app1生成的ST跟app2并不不一定一致,或者说是相互独立的ST。至于app1与app2的session是否需要共享,那是另外的话题了。
cas认证流程到此结束!
以上是参考https://apereo.github.io/cas/development/protocol/CAS-Protocol.html 再结合自己的见解得出的总结,不当之处还请批评指正~
- jasig cas笔记(一):基础(非代理)认证流程
- cas认证服务器(一)
- jasig CAS实现单点登录(数据库认证)
- jasig CAS实现单点登录(数据库认证)
- jasig CAS实现单点登录(数据库认证)
- jasig.cas客户端认证成功后ConnectionTimedout
- CAS认证流程详解(1)
- CAS认证(1):流程详解
- jasig cas单点登录配置笔记
- 单点登录cas jasig学习笔记
- CAS学习笔记(一)--认识CAS
- Jasig CAS使用手札——一、了解Jasig CAS,简单运行!
- CAS学习笔记(一)
- CAS项目登录流程介绍(一)
- CAS 服务端登录验证流程(一)
- cas 认证流程
- CAS客户端认证流程
- cas 认证流程
- .net中的托管和非托管
- CentOS7 搭建LVS
- gc日志打印
- 基于scrapy的智联职位爬取
- (2)selenium常见问题-兼容性与键盘事件等
- jasig cas笔记(一):基础(非代理)认证流程
- Android网络编程Okhttp3用法详解
- 【canvas学习笔记六】状态保存和变换
- Java-String类的常用方法总结
- java web 开发所需要的依赖包maven
- retrofit网络框架源码解析
- python里怎么样通过函数名称来获取函数地址
- html div CSS 实现倒三角
- n划分为1,2,3等等(动态规划)