关于前端:聊聊单点登录SSO中的CAS认证

5次阅读

共计 2875 个字符,预计需要花费 8 分钟才能阅读完成。

SSO 介绍

背景

  • 随着企业的倒退,一个大型零碎里可能蕴含 n 多子系统, 用户在操作不同的零碎时,须要屡次登录,很麻烦,咱们须要一种 全新的登录形式来实现多零碎利用群的登录,这就是单点登录
  • web 零碎 由单零碎倒退成 多零碎组成的利用群 ,复杂性应该由 零碎外部 承当,而不是用户。无论 web 零碎外部如许简单,对用户而言,都是一个对立的整体,也就是说,用户拜访 web 零碎的整个利用群与拜访单个零碎一样,登录 / 登记 只有 1 次就够了

SSO 定义

  • SSO(Single sign-on) 即单点登录,一种对于许多互相关联,然而又是各自独立的软件系统,提供访问控制的办法
  • SSO(Single sign-on) 是比拟风行的企业业务整合的解决方案之一。SSO(Single sign-on) 定义是在多个利用零碎中,用户只须要登录一次就能够拜访所有相互信任的利用零碎

    以游乐场的通票为例:

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

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

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 零碎

第一次拜访 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 的票据

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

单点登录(SSO)

第一次拜访 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

在 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 登出胜利
正文完
 0