简述CAS单点登录的实现原理

CAS

CAS(Central Authentication Service)单点登录系统是一种常见的身份验证和授权解决方案,它可以让用户在一个认证中心(CAS服务器)上登录,然后使用此登录信息访问多个应用程序而无需再次登录。

先了解几个名词:

  • TGC:(Ticket-granting Cookie),存放 SSO 用户身份凭据的 Cookie,类似 JSESSIONID。
  • TGT:(Ticket Granting Ticket),在 SSO 中标识一位用户,类似 Session。
  • ST:(Service Ticket),作为一个参数跟在 url 后面, 代表 CAS 为某一用户访问 CAS 客户端签发的凭据。
    The TGT (Ticket Granting Ticket), stored in the TGC cookie, represents a SSO session for a user. The ST (Service Ticket), transmitted as a GET parameter in urls, stands for the access granted by the CAS server to the CASified application for a specific user.

登录时序图

红色字体是我添加的翻译 ,可能不够准确,仅供参考
官网提供的时序图

首次认证流程

按上述步骤启动 CAS 相关应用后,打开浏览器,访问 https://localhost:9443/sample/,输入口令完成登录,在 Fiddler 中过滤无关请求,需要学习的请求如图。
CAS认证流程

  1. 序号 930,第一次访问 https://localhost:9443/sample/,会经过 CAS 提供的过滤器 org.jasig.cas.client.authentication.AuthenticationFilter,过滤器判断到当前用户没有登录,将请求重定向到认证中心,如图;
    CAS认证--重定向到 CAS 服务器

    重定向的地址是在过滤器参数中配置的 casServerLoginUrlservice 参数值则是过滤器参数中配置的 serverName,即认证后要跳转的地址。

  2. 序号 932,CAS 服务器接收到登录请求,返回登录页面;
    CAS登录页面

  3. 序号 956,用户输入口令后提交登录,CAS 服务器验证用户名密码是否有效(这里使用静态认证),如图;
    CAS 认证--登录提交

    使用 POST 请求的方式提交登录表单,用户认证成功后,请求的响应码是 302,指示浏览器将请求重定向到最开始访问的地址。重定向的地址通过 querySpring 携带了一个 ticket 参数。同时会设置一个名为 TGC 的 Cookie,路径为 /cas/。下次访问 https://cas.server.com:8443 时会携带这个 Cookie,服务器可以根据这个 TGC,查找与之对应的 TGT,从而判断用户是否认证过,是否需要展示登录页面。TGT 与 TGC 的关系就像 SESSION 与 Cookie 中 JSESSIONID 的关系

  4. 序号 957,浏览器向 https://localhost:9443/sample/ 发起请求,请求携带 CAS 服务器签发的 STlocalhost:9443 在过滤器中获取到 ticket 值,通过 HTTP 请求的方式调用 CAS 服务验证该 ticket 是否有效,过滤器全称 org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter ,验证方法在 org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator#validate, 如图。
    validate

此时,CAS 服务器的日志如下图。
CAS 认证--ST 验证
localhost:9443 收到 CAS 服务器返回,知道用户合法,即可正常响应请求,展示页面,如图。
CAS 认证--客户端响应

  1. 序号 958,ST 验证通过后再次重定向是在 Cas30ProxyReceivingTicketValidationFilter 过滤器中使用了 redirectAfterValidation 参数(默认为 true),将其配置成 false 即可在验证用户后返回正常页面,如图。
    CAS 认证--重定向
    CAS认证--访问客户端

再次认证流程

第一次访问 localhost:9443 的步骤已梳理完成,保持用户在 SSO 的会话,尝试访问 localhost:7443,观察其流程。请求重定向到 CAS 服务器时,携带了值为 TGC 的 Cookie。CAS 服务器通过此 TGC 查找到对应的 TGT,判断到用户已经登录,便不再展示登录页面,即少了 CAS 服务器登录这个步骤,剩余步骤和首次登录一致,如图。
再次认证流程

CAS单点登录的实现原理

  1. 用户访问需要身份验证的应用程序,并尚未进行身份验证。

  2. 应用程序重定向用户到CAS服务器进行登录验证。

  3. CAS服务器检查用户的登录凭据,如果验证通过,则创建一个票据(ticket)。

  4. CAS服务器将票据发送回应用程序,并将用户重定向回应用程序。

  5. 应用程序接收票据,并将其发送回CAS服务器以进行验证。

  6. 如果票据有效,则CAS服务器返回身份验证成功的响应。

  7. 应用程序将用户身份验证信息保存在会话中,以便以后的访问。

  8. 如果用户尝试访问其他应用程序,则该应用程序将使用相同的步骤验证用户身份。

因此,CAS单点登录系统的主要思想是将用户身份验证过程与应用程序分离开来,使得用户只需进行一次登录验证,就可以访问多个应用程序。CAS系统将所有的登录信息存储在一个中心化的认证中心中,使得其他应用程序可以通过该中心获取用户的身份验证信息,从而实现单点登录的功能。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce_Eckel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值