cas协议是什么

cas协议是什么?

CAS协议是一种简单且功能强大的基于票证(ticket)的协议。它涉及一个或多个客户端和一台服务器。中央身份验证服务(CAS)是Web的单点登录/单点退出协议。用户向中央CAS Server应用程序提供一次凭据(例如用户ID和密码),就可以访问多个应用程序。客户端嵌入在CASified应用程序中(称为“ CAS服务”),而CAS服务器是独立组件:

  • CAS服务器负责验证用户并授予访问应用程序
  • CAS客户保护CAS应用程序和检索CAS服务器的授权用户的身份。

关键概念:

  • TGT存储在TGCcookie中的(“票证授予票证”)代表用户的SSO会话。
  • ST(服务票据),作为传输GET参数的URL,代表由CAS服务器授予访问CASified应用程序对特定用户。

官方地址

第一次访问app#a的单点登录流程图

sequenceDiagram
user->>browser:用户通过游览器访问应用
browser ->> app#a: 用户访问应用a 应用a监测到没有认证的用户重定向游览器到cas服务器
app#a ->> browser: 302 location:https://cas.example.com/cas/login?service=https%3A%2F..com%2F
browser ->> cas server: get https://cas.example.com/cas/login?service=https%3A%2F..com%2F
cas server ->> browser: cas判断是否有sso session 存在,没有session存在返回登录页面
browser ->> cas server: post https://cas.example.com/cas/login?service=https%3A%2F..com%2F 带上用户名密码
cas server ->> cas server: 认证用户
cas server ->> browser: 用户认证成功,生成sso session 并生成 TGT 存在游览器cookie里面 \n Set-Cookie: CASTGC=TGT-2345678 302 location https://app.example.com/?ticket=ST-12345678
browser ->> app#a: get https://app.example.com/?ticket=ST-12345678
app#a ->> cas server: 客户端带上ticket请求cas校验ticket get https://cas.example.com/serviceValidate?service=https%3A%2F..com%2F&ticket=ST-12345678
cas server ->> app#a: cas返回 [200] XML Content
app#a ->> browser: 设置cookie,重定向到前端业务地址 Set-Cookie: JESSIONID=12345678 302 location https://app.example.com/
browser ->> app#a: get https://app.example.com/: app#a 校验session是否合法
app#a ->> browser: session合法响应内容
browser ->> user : 渲染页面

第二次访问相同系统app流程

sequenceDiagram
user->>browser:用户通过游览器访问应用
browser ->> app#a: 游览器带上cookie访问应用a
app#a ->> browser: 校验session通过返回页面
browser ->> user: 渲染页面
browser ->> cas server: get https://cas.example.com/cas/login?service=https%3A%2F..com%2F

第一次访问第二个app app#b

sequenceDiagram
user->>browser:用户通过游览器访问应用
browser ->> app#b: get https://app2.example.com 
app#b ->> browser: 应用b检测到没有认证的用户重定向游览器到cas服务器 302 location:https://cas.example.com/cas/login?service=https%3A%2F..com%2F
browser ->> cas server: get https://cas.example.com/cas/login?service=https%3A%2F..com%2F
cas server ->> cas server:校验TGT 判断是否存在 sso session
cas server ->> browser: 用户认证成功 302 location https://app.example.com/?ticket=ST-12345678
browser ->> app#b: get https://app.example.com/?ticket=ST-12345678
app#b ->> cas server: 客户端带上ticket请求cas校验ticket get https://cas.example.com/serviceValidate?service=https%3A%2F..com%2F&ticket=ST-12345678
cas server ->> app#b: cas返回 [200] XML Content
app#b ->> browser: 设置cookie,重定向到前端业务地址 Set-Cookie: JESSIONID=12345678 302 location https://app.example.com/
browser ->> app#b: get https://app.example.com/: app#a 校验session是否合法
app#b ->> browser: session合法响应内容
browser ->> user : 渲染页面

官方时序图

正常单点登录流程
代理单点登录流程

代理单点登录流程 没看懂要用在那种场景 希望哪位大牛能指点指点

你可能感兴趣的:(cas协议是什么)