资讯专栏INFORMATION COLUMN

cas工作原理浅析与总结

warkiz / 1788人阅读

摘要:是大学发起的一个企业级的开源的项目,旨在为应用系统提供一种可靠的单点登录解决方法属于。实现原理是先通过的认证,然后向申请一个针对于的,之后在访问时把申请到的针对于的以参数传递过去。后面的流程与上述流程步骤及以后步骤类似

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

请求app地址http://www.app.com

app端(cas client)AuthenticationFilter中校验session中_const_cas_assertion_,不为空,直接放过url;否则获取request中的ticket参数,request中无ticket,302重定向到cas server地址,url中带上service参数http://www.casserver.com/?ser...://www.app.com

cas server先判断context中是否有service对应的TGT

判断没有TGT,返回login form(客户端跳转至cas server登录页地址)

用户输入登录信息,form提交至cas server

cas server验证登录信息,生成TGT和ST

设置TGC至cookie,url中显式带上ticket(STid)参数,重定向Browser至App

App中AbstractTicketValidationFilter 会向cas server请求校验ticket,带上ticket(STid)和service(回调地址)参数

cas server通过ServiceValidateController校验ticket

确认有效后返回校验成功

此时App中会根据成功结果,在session中设置_const_cas_assertion_属性

重定向到app,此时url中不带有ticket参数

这时再经过AuthenticationFilter时,session中有_const_cas_assertion_属性,放行;再经过AbstractTicketValidationFilter时,request中没有ticket参数,放行,访问目标资源

返回目标资源给browser

要点如下:

如若第4步中,判断结果为有service对应的TGT,先验证ticket(TGTid)、service是否合法,再根据renew参数看是否要重新创建service ticket,若要重新创建,则需要重新登录;否则重新转向service地址

如若app端想使用自己的自定义登录界面,可以在第4步中不跳转cas server的登录页地址,转而跳转至自定义登录页面。但需要向cas server端请求login ticket,在用户填写登录表单后,连同login ticket一同传参至cas server去做校验

第6步中,TGT和ST的生成规则(这里指TGTid和STid的生成规则,TGT和ST均为类):"TGT_XX_RandomStr" "ST_XXX_RandomStr"。XX、XXX为AtomicLong.getAndIncrement()方法自增Long类型数字(最大值时,调用AtomicLong.compareAndSet()方法置0);RandomStr为随机字符串

步骤12中再已校验完用户信息的情况下,再次进行重定向的目的,是为了隐藏第7步重定向时url中的ticket入参

单点登录的目的,是让用户登录App1后,如有权限,可免登录,直接访问App2、App3等。cas的实现方式,是在访问其他App时,使用Cas Proxy。实现原理是App1先通过Cas Server的认证,然后向Cas Server申请一个针对于App2的proxy ticket,之后在访问App2时把申请到的针对于App2的proxy ticket以参数ticket传递过去。后面的流程与上述cas流程步骤8及以后步骤类似

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/69276.html

相关文章

  • CAS 5.2.x 单点登录 - 实现原理及源码浅析

    摘要:上一篇文章简单介绍了在本地开发环境中搭建服务端和客户端,对单点登录过程有了一个直观的认识之后,本篇将探讨单点登录的实现原理。因此引入服务端作为用户信息鉴别和传递中介,达到单点登录的效果。为该流程的实现类。表示对返回结果的处理。 上一篇文章简单介绍了 CAS 5.2.2 在本地开发环境中搭建服务端和客户端,对单点登录过程有了一个直观的认识之后,本篇将探讨 CAS 单点登录的实现原理。 一...

    elisa.yang 评论0 收藏0
  • 浅析CAS操作JAVA实现

    CAS Compare And Swap.比较并交换.java中的同步器就是基于CAS技术实现的,为什么它能保证操作的同步性呢?因为是原子操作的一种,所以可以在多线程环境下来实现数据的交换操作不被打断. CAS的缺陷ABA问题: 第一个线程来读取变量A时被挂起;第二个线程过来操作A,将A赋值为B之后,并重新赋值为A;线程二完成操作;此时,对于线程一来说,所看到变量A的值是没有变化的,但是实际上变...

    haobowd 评论0 收藏0
  • 【Java并发】浅析 AtomicLong & LongAdder

    摘要:最终依旧使用来更新值。此时使用能更好地提升性能。适用于高并发情况下的计数操作,利用与相似的原理,以空间换时间,提高了实际的计数效率。 AtomicLong /** * Atomically increments by one the current value. * * @return the updated value */ public final long increme...

    zhjx922 评论0 收藏0
  • 原理剖析(第 004 篇)CAS工作原理分析

    摘要:原理剖析第篇工作原理分析一大致介绍关于多线程竞争锁方面,大家都知道有个和,也正是这两个东西才引申出了大量的线程安全类,锁类等功能而随着现在的硬件厂商越来越高级,在硬件层面提供大量并发原语给我们层面的开发带来了莫大的利好本章节就和大家分享分 原理剖析(第 004 篇)CAS工作原理分析 - 一、大致介绍 1、关于多线程竞争锁方面,大家都知道有个CAS和AQS,也正是这两个东西才引申出了大...

    leanote 评论0 收藏0
  • 【整理总结】负载均衡浅析

    摘要:负载均衡算法轮询,加权轮询。参考三负载均衡负载均衡由服务提供厂商提供。之后,集群内再采用其他的负载均衡方案。参考五负载均衡工作在层,它会与分别建立连接,需要维护这两个连接的状态。 运营研发团队 施洪宝 一. 基础知识 1.1 基础 什么是负载均衡? 当单机提供的并发量不能满足需求时,我们需要多台服务器同时服务。当客户请求到达时,如何为客户选择最合适的服务器?这个问题就是负载均衡问题。...

    idealcn 评论0 收藏0

发表评论

0条评论

warkiz

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<