CAS登录认证[通俗易懂]

CAS登录认证[通俗易懂]CAS最基本的协议过程:名词解释 TicketGrangtingTicket(TGT): TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key

大家好,又见面了,我是你们的朋友全栈君。

CAS最基本的协议过程:

CAS登录认证[通俗易懂]

名词解释

  • Ticket Grangting Ticket(TGT)
    TGT是CAS为用户签发的登录票据,拥有了TGT,用户就可以证明自己在CAS成功登录过。TGT封装了Cookie值以及此Cookie值对应的用户信息。用户在CAS认证成功后,CAS生成cookie(叫TGC),写入浏览器,同时生成一个TGT对象,放入自己的缓存,TGT对象的ID就是cookie的值。当HTTP再次请求到来时,如果传过来的有CAS生成的cookie,则CAS以此cookie值为key查询缓存中有无TGT,如果有的话,则说明用户之前登录过,如果没有,则用户需要重新登录。

  • Ticket-granting cookie(TGC)
    存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,并且只能基于安全通道传输(Https),是CASServer用来明确用户身份的凭证。

  • Service ticket(ST) :服务票据,服务的惟一标识码 , 由 CASServer 发出( Http 传送),用户访问Service时,service发现用户没有ST,则要求用户去CAS获取ST.用户向CAS发出获取ST的请求,CAS发现用户有TGT,则签发一个ST,返回给用户。用户拿着ST去访问service,service拿ST去CAS验证,验证通过后,允许用户访问资源

组成

  • CAS 服务端
    CASServer 负责完成对用户的认证工作 , 需要独立部署 , CAS Server 会处理用户名 /密码等凭证 (Credentials) 。

  • CAS 客户端
    负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。
    CASClient 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。

CAS Web工作流程

CAS登录认证[通俗易懂]

CAS登录流程

步骤 1:浏览器向CAS客户端发起登陆请求,CAS客户端生成“登陆URL”,并把浏览器重定向到该URL 登陆URL:https://${cas-server-host}:${cas-server-port}/cas-server/login?service=${client-service-url}

  • 其中
    • cas-server-host: cas认证服务器的域名
    • cas-server-port: cas认证服务器的IP
    • client-service-url: 用于登陆成功后,浏览器重定向的URL

java举例:
https://cas-server.domain.com/cas/login?service=http%3A%2F%2Fcas.domain.com%3A8080

步骤 2: 浏览器向“登陆URL”发起重定向请求,CAS服务端创建会话,把TGT(Ticket Granting Ticket)放入cookie,并返回登陆页面

步骤 3:用户输入用户名和密码,然后提交登陆表单. CAS服务端通过登陆验证后,会生成一个ST(service ticket,简称ticket), 然后把浏览器重定向到${client-service-url}?ticket=${service-ticket}

步骤 4:浏览器重定向到${client-service-url}?ticket=${service-ticket}发起重定向请求

java举例:
http://cas.domain.com/8080?ticket=${service-ticket}

步骤 5: CAS客户端取出ticket,生成“ticket验证URL”,然后向”ticket验证URL”发起http GET请求 “ticket验证URL”: http://${cas-server-host}:${cas-server-port}/cas-server/serviceValidate?ticket=${service-ticket}&service=${client-service-url}

java举例:
https://cas-server.domain.com/cas/serviceValidate?ticket=${service-ticket}&service=http://cas.domain.com/8080

步骤 6: 如果CAS服务器通过ticket的有效性检查,那么会返回类似如下格式的XML片段

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationSuccess> 
        <cas:user>AAAA</cas:user>
    </cas:authenticationSuccess> 
</cas:serviceResponse>
  • 其中AAAA是登陆的用户名

否则返回:

<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'> 
    <cas:authenticationFailure code='XXX'> YYY </cas:authenticationFailure> 
</cas:serviceResponse>
  • 其中:
    • XXX的可能取值是INVALID_REQUEST, INVALID_TICKET, INVALID_SERVICE, INTERNAL_ERROR
    • YYY是错误描述信息

至此CAS的登陆流程结束

登陆成功后,CAS客户端应该在会话中保存登陆状态信息。CAS服务器通常在步骤 6会建立ticket和${client-service-url}的映射关系,以便在登出时通知其业务系统清除缓存中的状态信息

CAS登出流程

浏览器或CAS客户端向“登出URL”发起GET请求: “登出URL”: https://${cas-server-host}:${cas-server-port}/cas-server/logout CAS服务器销毁TGT和ST,并向所有已登陆的业务系统发出登出通知请求

java举例:
https://cas-server.domain.com/cas/logout?service=http://cas.domain.com:8080

<end>


<strike>
请求方法:POST
请求URL: ${client-service-url} ( http://cas.domain.com/8080)
请求头: Content-Type:application/x-www-form-urlencoded
请求正文:

<!-- lang: xml --> 
logoutRequest=
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="#LR_TICKET_ID#" Version="2.0" IssueInstant="#CURRENT_DATETIME#"> 
    <saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">@NOT_USED@</saml:NameID> 
    <samlp:SessionIndex>#ST#</samlp:SessionIndex> 
</samlp:LogoutRequest>
  • 其中
    • LR_TICKET_ID:   CAS服务器为每个登出通知请求所生成的一个值
    • ST         之前登陆成功后CAS服务端传回来的Service Ticket
    • CURRENT_DATETIME 发出该请求时,CAS服务器的日期/时间
      </strike>

作者:llitfk_DockOne
链接:https://www.jianshu.com/p/8daeb20abb84
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150277.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • win10文件访问被拒绝_windows10已拒绝远程连接

    win10文件访问被拒绝_windows10已拒绝远程连接尝试以下方法:1)开启|关闭防火墙(这里需要关闭)sudoufwenable|disable2)开启远程服务在终端界面输入:servicesshdstart。结果显示:ssh:unrecognizedservice。输入查看命令:servicesshstatus显示也是unrecognizedservice。开启远程服务:终端界…

    2022年9月17日
    4
  • 阿里云大数据存储密集型实例d2s云服务器配置性能详解

    阿里云大数据存储密集型实例d2s云服务器配置性能详解阿里云大数据存储密集型实例d2s云服务器配置性能CPU、内存、适用场景、大数据存储密集型d2s实例规格族和优惠报价信息,InstanceTypes分享大数据存储密集型d2s实例详解:大数据存储密集型d2s实例规格族特性I/O优化实例支持ESSD云盘、SSD云盘和高效云盘实例配备大容量、高吞吐SATAHDD本地盘,辅以最大35Gbit/s实例间网络带宽支持在线更换坏盘,支持热插拔坏盘,避免导致实例停机处理器:2.5GHz主频的Intel®Xeon®Platinum8163(Sky.

    2022年5月2日
    58
  • py2exe怎么安装_eclipse设置pydev

    py2exe怎么安装_eclipse设置pydev系统:Windows7Ultimate 64-bits一、安装py2exepy2exe下载链接:http://download.csdn.net/detail/joey_su/6713523二、使用方法新建一个要转换成windows上可执行程序的python脚本,名称为”helloworld.py”,存储路径为D:\Project\Python\hell

    2025年10月20日
    2
  • SQL 开发任务超 50% !滴滴实时计算的演进与优化

    SQL 开发任务超 50% !滴滴实时计算的演进与优化摘要:ApacheFlink是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态计算。可部署在各种集群环境,对各种大小的数据规模进行快速…

    2022年6月2日
    61
  • js call方法_recall

    js call方法_recallJacvaScript中的call()方法和apply()方法,1.每个函数都包含两个非继承而来的方法:call()方法和apply()方法。2.相同点:这两个方法的作用是一样的。都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖以运行的作用域。

    2025年8月9日
    1
  • PHP递归求和计算1加到n的和

    PHP递归求和计算1加到n的和

    2022年2月17日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号