博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
cas工作原理浅析与总结
阅读量:6621 次
发布时间:2019-06-25

本文共 1562 字,大约阅读时间需要 5 分钟。

CAS( Central Authentication Service )是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。

其流程用时序图描述如下:
图片描述

  1. 请求app地址
  2. app端(cas client)AuthenticationFilter中校验session中_const_cas_assertion_,不为空,直接放过url;否则获取request中的ticket参数,request中无ticket,302重定向到cas server地址,url中带上service参数://www.app.com
  3. cas server先判断context中是否有service对应的TGT
  4. 判断没有TGT,返回login form(客户端跳转至cas server登录页地址)
  5. 用户输入登录信息,form提交至cas server
  6. cas server验证登录信息,生成TGT和ST
  7. 设置TGC至cookie,url中显式带上ticket(STid)参数,重定向Browser至App
  8. App中AbstractTicketValidationFilter 会向cas server请求校验ticket,带上ticket(STid)和service(回调地址)参数
  9. cas server通过ServiceValidateController校验ticket
  10. 确认有效后返回校验成功
  11. 此时App中会根据成功结果,在session中设置_const_cas_assertion_属性
  12. 重定向到app,此时url中不带有ticket参数
  13. 这时再经过AuthenticationFilter时,session中有_const_cas_assertion_属性,放行;再经过AbstractTicketValidationFilter时,request中没有ticket参数,放行,访问目标资源
  14. 返回目标资源给browser

要点如下:

  1. 如若第4步中,判断结果为有service对应的TGT,先验证ticket(TGTid)、service是否合法,再根据renew参数看是否要重新创建service ticket,若要重新创建,则需要重新登录;否则重新转向service地址
  2. 如若app端想使用自己的自定义登录界面,可以在第4步中不跳转cas server的登录页地址,转而跳转至自定义登录页面。但需要向cas server端请求login ticket,在用户填写登录表单后,连同login ticket一同传参至cas server去做校验
  3. 第6步中,TGT和ST的生成规则(这里指TGTid和STid的生成规则,TGT和ST均为类):"TGT_XX_RandomStr" "ST_XXX_RandomStr"。XX、XXX为AtomicLong.getAndIncrement()方法自增Long类型数字(最大值时,调用AtomicLong.compareAndSet()方法置0);RandomStr为随机字符串
  4. 步骤12中再已校验完用户信息的情况下,再次进行重定向的目的,是为了隐藏第7步重定向时url中的ticket入参
  5. 单点登录的目的,是让用户登录App1后,如有权限,可免登录,直接访问App2、App3等。cas的实现方式,是在访问其他App时,使用Cas Proxy。实现原理是App1先通过Cas Server的认证,然后向Cas Server申请一个针对于App2的proxy ticket,之后在访问App2时把申请到的针对于App2的proxy ticket以参数ticket传递过去。后面的流程与上述cas流程步骤8及以后步骤类似

转载地址:http://aojpo.baihongyu.com/

你可能感兴趣的文章
208亿背后的“秘密”
查看>>
Android系统自带样式(android:theme)解析
查看>>
全志A33开发板Linux内核定时器编程
查看>>
全栈必备 敏捷估点
查看>>
一个爬虫小技巧
查看>>
作为一名合格的JAVA架构师需要点亮哪些技能树?
查看>>
为什么短视频会让人刷不停?背后也许用了这套技术
查看>>
Kubernetes 在知乎上的应用
查看>>
读C#开发实战1200例子记录-2017年8月14日11:20:38获取汉字编码值
查看>>
Fescar 发布 0.3.1 版本, 支持 ZooKeeper 注册中心
查看>>
网站优化中四个常见的优化难题及解决方法!
查看>>
【死磕 Spring】----- IOC 之解析 bean 标签:BeanDefinition
查看>>
Java部署环境搭建(Linux)
查看>>
使用 will-change 来提升浏览器渲染效果
查看>>
Animation总结(差值器和估值器)
查看>>
Java数据结构与算法(十)-图
查看>>
4.1 在SELinux中客体类存在的目的
查看>>
如何用iPad运行Python代码?
查看>>
PHP学习3——数组
查看>>
E-HPC支持多队列管理和自动伸缩
查看>>