聊聊单点登录(SSO)中的CAS认证

链式苔藓
• 阅读 2780

SSO介绍

背景

  • 随着企业的发展,一个大型系统里可能包含 n 多子系统, 用户在操作不同的系统时,需要多次登录,很麻烦,我们需要一种全新的登录方式来实现多系统应用群的登录,这就是单点登录
  • web 系统 由单系统发展成多系统组成的应用群,复杂性应该由系统内部承担,而不是用户。无论 web 系统内部多么复杂,对用户而言,都是一个统一的整体,也就是说,用户访问 web 系统的整个应用群与访问单个系统一样,登录/注销 只要1次就够了

聊聊单点登录(SSO)中的CAS认证

SSO 定义

  • SSO(Single sign-on) 即单点登录,一种对于许多相互关联,但是又是各自独立的软件系统,提供访问控制的方法
  • SSO(Single sign-on) 是比较流行的企业业务整合的解决方案之一。SSO(Single sign-on) 定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统

    以游乐场的通票为例:

我们只要买一次通票,就可以玩所有游乐场内的设施,而不需要在过山车或者摩天轮那里重新买一次票。在这里,买票就相当于登录认证,游乐场就相当于使用一套 SSO 的公司,各种游乐设施就相当于公司的各个产品。

聊聊单点登录(SSO)中的CAS认证

类比到各个子系统认证,如图

聊聊单点登录(SSO)中的CAS认证

SSO 三种类型

  • 各子系统在同一个站点下
  • 各子系统在相同的顶级域名下

    同一个站点和相同顶级域下的单点登录是利用了 Cookie 顶域共享的特性。目前数栈都是只需要在 UIC 的登录页面进行一次登录就可以在各个子应用之间进行跳转,这种操作源于根据设置 Cookie 中的 domain 为顶级域名。

  • 各子系统属于不同的顶级域

    如果属于不同的域,不同域之间的 Cookie 是不共享的。怎么办?接下来就要说一说 CAS (Central Authentication Service) 流程了,这个流程是单点登录的标准流程

CAS (Central Authentication Service)

CAS 是什么

  Central Authentication Service ——— 中央认证服务,是 Yale 大学发起的一个企业级的、开源的项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。只是 SSO 解决方案的一种,它的流程其实跟 Cookie-session 模式是一样的,单点登录等于说是每个子系统都拥有一套完整的 Cookie-session 模式,再加上一套 Cookie-session 模式的 SSO 系统

聊聊单点登录(SSO)中的CAS认证

第一次访问 APP1:

  1. 用户访问 APP1,需要登录的时候会重定向到 CAS Server
  2. CAS Server 进行账号密码认证,CAS Server 会保存 session,并生成 sessionId 返回给 SSO Client,SSO Client 写入当前域的 Cookie,同时根据 TGT 签发1个 ST 传入 APP1
  3. APP1 携带 STCAS Server 请求校验
  4. CAS Server 校验成功后,返回 登录态给 APPI 服务端
  5. APPI 服务端 将 登陆态写入 session 并生成 sessionId 返回给 APPI Client
  6. 之后再做登录认证,就是同域下的认证了

第一次访问 APP2:

  1. 用户访问系统 APP2,当跳到 SSO 里准备登录的时候发现 SSO 已经登录了,那 SSO 生成一个 ST,携带该 ST 传入 APP2
  2. APP2 携带 STCAS Server 请求校验
  3. CAS Server 校验成功后,返回 登录态给 APP2 服务端
  4. APP2 服务端 将 登陆态写入 session 并生成 sessionId 返回给 APPI Client
  5. 在这个流程里,APP2 就不用走登录流程了

CAS 票据

TGT

CAS Server 创建TGT,存在 CAS ServerSession 里面,根据用户信息签发的

TGC

 创建 TGT 的同时,生成 TGC。通过 CAS Serverresponse header 的 set-cookie 字段设置 TGC,唯一标识用户身份(sessionId) ST

ST

 根据 TGT 签发的 ST,是 CAS 为用户签发的访问某一 service 的票据

聊聊单点登录(SSO)中的CAS认证

CAS 单点登录(SSO) &  单点登出(SLO)

单点登录(SSO)

聊聊单点登录(SSO)中的CAS认证

第一次访问 APP1:

  1. 访问 APP1 服务地址,APP1 请求未通过认证,重定向至 CAS Server 地址。
  2. 访问 CAS Server 地址,发送认证请求,带上 Cookie
  3. CAS Server 识别出用户没有 Cookie 信息,没有登录,返回 CAS 登陆页地址。
  4. 用户输入正确的账户密码,CAS Server 用户认证通过,创建 SSO Session
  5. 重定向回 APP1 的服务地址,并在 cookie 中创建了 CASTGCTGC 中包含了 Ticket(TGT)TGT 就是 SSO Sessionkey
  6. 访问 APP1 的服务地址,并带上 ST,客户端拿到 STCAS Server进行认证。
  7. CAS Server 认证成功,返回响应信息给 APPI
  8. APPI 拿到成功的响应后,设置 Session,并重定向回 APP1 的地址,并设置 Cookie JSESSIONID
  9. APPI 发起请求,带上 Cookie 中的信息,其中 JSESSIONID 用来确定当前用户所对应的 session 信息,发送给客户端进行校验。
  10. 客户端使用 JSESSIONIDSession 中存储的数据进行校验。
  11. 校验通过,返回正确的内容,展示 APP1

第二次访问 APP1:

  1. APPI 发起请求,并带上 Cookie 中的 JSESSIONIDAPPI 服务端。
  2. APPI 服务端 使用 JSESSIONIDSession 中存储的数据进行校验。
  3. 校验通过,返回正确的内容,展示 APP1

聊聊单点登录(SSO)中的CAS认证

在 APP1 登陆成功的情况下,第一次访问 APP2:

  1. 访问 APP2 服务地址,APP2 请求未通过认证,重定向至 CAS Server 地址。
  2. 访问 CAS Server 地址,发送认证请求,带上 TGT 信息。
  3. CAS Server 通过 TGT 去查找 SSO 的信息进行认证。
  4. 认证通过,生成票据 ST 重定向至 APP2 的服务地址。
  5. APP2 服务 携带 STCAS Server 进行认证。
  6. CAS Server 认证成功,返回客户端通过的响应。
  7. 客户端拿到成功的响应后,设置 Session,并重定向至 APP2 的地址,并设置 Cookie MOD_AUTH_CAS_S
  8. APP2 发起请求,带上 Cookie 中的 MOD_AUTH_CAS_S ,发送给客户端进行校验。
  9. 客户端使用 MOD_AUTH_CAS_SSession 中存储的数据进行校验。
  10. 校验通过,返回正确的内容,展示 APP2

官方时序图

 单点登出(SLO)

  1. APP1 平台 请求退出登录后, 先在 query 中 携带 service 字段 重定向 CAS 登出地址
  2. 用户携带 service query 字段和 CASTGC 请求到 CAS Server
  3. CAS Server 根据 CASTGC 找到 TGT的信息,删除 TGT 完成 CAS 的注销
  4. CAS Server 可以在 TGT 中拿到关联的所有 ST, 根据 ST 找到对应的应用注册信息,调用其中的 logoutUrl,把 ST 包装到 logoutRequest 发送给 APP1
  5. APP1 根据 logoutRequest 找到 ST ,查找 Session 中以 ST 为键的值删除,清除登陆状态
  6. APP1 登出成功
  7. APP2 根据 logoutRequest 找到 ST ,查找 Session 中以 ST 为键的值删除,清除登陆状态
  8. APP2 登出成功

聊聊单点登录(SSO)中的CAS认证

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
SSO单点登录学习总结(1)——单点登录(SSO)原理解析
SSO的概念:单点登录SSO(SingleSignOn)是身份管理中的一部分。SSO的一种较为通俗的定义是:SSO是指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证。SSO的用途:目前的企业应用环境中,往往有很多的应用系统,
【实践篇】基于CAS的单点登录实践之路
上个月我负责的系统SSO升级,对接京东ERP系统,这也让我想起了之前我做过一个单点登录的项目。想来单点登录有很多实现方案,不过最主流的还是基于CAS的方案,所以我也就分享一下我的CAS实践之路。
Stella981 Stella981
3年前
CAS 实现站内单点登录及实现第三方 OAuth、OpenId 登录(一)
一、CAS介绍    CAS是Yale大学发起的一个开源项目,旨在为Web应用系统提供一种可靠的单点登录方法,CAS在2004年12月正式成为JASIG的一个项目。CAS具有以下特点:开源的企业级单点登录解决方案CASServer为需要独立部署的Web应用CASClient支持非
Stella981 Stella981
3年前
Spring+ Spring cloud + SSO单点登录应用认证
之前的文章中有介绍springcloudsso集成的方案,也做过springjwtredis的解决方案,不同系统的无缝隙集成,统一的sso单点登录界面的管理、每个应用集成的权限认证,白名单等都是我们需要考虑的,现在针对于以上的问题我们做了sso单点登录应用认证平台,设计如下:1\.数据库设计:Java代码!复制代码(http
Wesley13 Wesley13
3年前
CAS单点登录(一):单点登录与CAS理论介绍
一、什么是单点登录(SSO)  单点登录主要用于多系统集成,即在多个系统中,用户只需要到一个中央服务器登录一次即可访问这些系统中的任何一个,无须多次登录。  单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所
Stella981 Stella981
3年前
SSO单点登录基于CAS架构封装 Memcached 实例
SSO认证中心是CAS整个应用架构的一个极其重要的关键点,必须满足如下两点要求:1.高可用,不允许程序发生故障。如果认证中心发生故障,整个应用群将无法登录,导致所有服务瘫痪。2.高并发,因为所有用户的登录请求都需要经过它处理,其承担的处理量往往是相当巨大的。其中memcached的CAS源码MemCacheTicketRegistry.java类
Stella981 Stella981
3年前
Keycloak单点登录
!(https://oscimg.oschina.net/oscnet/82539809f0d749688ef60b10791cebd7.png)登录及身份认证是现代web应用最基本的功能之一,对于企业内部的系统,多个系统往往希望有一套SSO服务对企业用户的登录及身份认证进行统一的管理,提升用户同时使用多个系统的体验,Keycloak正是为此
Easter79 Easter79
3年前
SpringSecurity 整合SpringBoot结合jwt与rsa实现分布式认证授权
基于springsecurity整合springboot实现简单认证授权(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fifme%2Fp%2F12184433.html)进行修改实现分布式认证,即我们常说的单点登录,简称SSO,指的是在多应用系统
Stella981 Stella981
3年前
Django学习之JWT
JWTJsonWebToken,是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准(RFC7519),被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。单点登录(SingleSignOn,以下简称SSO),是指在多系统应用群中登录一个系统,便可在该应用群其他所有系统中得到授权而无需再次登录。
LeeFJ LeeFJ
2年前
Foxnic-Web 实现单点登录(SSO)
<aname"RPMAi"</a概述所谓单点登录(SingleSignOn),简称为SSO,就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。<br/任何系统接入SSO前需要完成两个步骤,<b
后端码匠 后端码匠
1年前
【Java】单点登陆
一、简介单点登陆:在多系统中单一位置登录可以实现多系统同时登录的一种技术。常在互联网应用和企业级平台中使用。第三方登陆:在某系统中使用其他系统的用户实现本系统登录的方式。如,在京东中使用微信登录。解决信息孤岛和用户不对等的实现方案。单点登陆需要解决的问题: