1. 会话与Cookie

HTTP是无状态协议,客户端与服务端之间的每次通信都是独立的,而会话机制可以让服务端鉴别每次通讯过程中的客户端是否是同一个,从而保证业务的关联性。 Session是服务器使用一种类似于散列表的结构,用来保存用户会话所需要的信息.Cookie作为浏览器缓存,存储Session ID以达到会话跟踪的目的。

 

会话与Cookie缓存

2. CAS介绍

2.1 CAS简介

SSO 单点登录,是企业为了解决在相互信任的系统上实现一次登录的解决方案。SSO将一个企业内部所有域中的用户登录和用户帐号管理集中到一起,SSO的好处显而易见:

  • 减少用户在不同系统中登录耗费的时间,减少用户登录出错的可能性;
  • 实现安全的同时避免了处理和保存多套系统用户的认证信息;
  • 减少了系统管理员增加、删除用户和修改用户权限的时间;
  • 增加了安全性:系统管理员有了更好的方法管理用户,包括可以通过直接禁止和删除用户来取消该用户对所有系统资源的访问权限。

CAS是SSO解决方案里面比较成熟的架构,是耶鲁大学发起的一个开源架构,其旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点:

  • 开源的企业级单点登录解决方案。
  • CAS Server 为需要独立部署的 Web 应用。
  • CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。

下图是 CAS 最基本的协议过程:

 

CAS协议过程
  1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。
  2. 重定向认证:SSO客户端会重定向用户请求到SSO服务器。
  3. 用户验证:用户身份认证。
  4. 生成票据:SSO服务器会产生一个随机的Service Ticket。
  5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。
  6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

2.2 CAS架构

 

CAS架构

CAS架构包括两部分:CAS Server和CAS Client。

  • CAS Server 需要独立部署,主要负责对用户的认证工作;
  • CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。

2.3 CAS基本流程

 

CAS基于Cookie单点登录的实现流程
  • 用户在单点登录服务器的登录页面中,输入用户名和密码。
  • 然后单点登录服务器会对用户名和密码进行认证。认证本身并不是单点登录服务器的功能,因此,通常会引入某种认证机制。认证机制可以有很多种,例如自己写一个认证程序,或者使用一些标准的认证方法,例如LDAP或者数据库等等。在大多数情况下,会使用LDAP进行认证。这是因为LDAP在处理用户登录方面,有很多独特的优势,这在本文的后面还会比较详细地进行介绍。
  • 认证通过之后,单点登录服务器会和应用程序进行一个比较复杂的交互,这通常是某种授权机制。CAS使用的是所谓的Ticket。具体这点后面还会介绍。
  • 授权完成后,CAS把页面重定向,回到Web应用。Web应用此时就完成了成功的登录(当然这也是单点登录的客户端,根据返回的Ticket信息进行判断成功的)。
  • 然后单点登录服务器会在客户端创建一个Cookie。注意,是在用户的客户端,而不是服务端创建一个Cookie。这个Cookie是一个加密的Cookie,其中保存了用户登录的信息。
  • 如果用户此时希望进入其他Web应用程序,则安装在这些应用程序中的单点登录客户端,首先仍然会重定向到CAS服务器。不过此时CAS服务器不再要求用户输入用户名和密码,而是首先自动寻找Cookie,根据Cookie中保存的信息,进行登录。登录之后,CAS重定向回到用户的应用程序。

2.4 CAS应用交互详解

以下是CAS应用之间交互过程的详细时序图与说明。

CAS基于Cookie单点登录的实现流程
  • 浏览器与APP01服务端

    • 浏览器第一次访问受保护的APP01服务端,由于未经授权而被拦截并重定向到CAS服务端。
    • 浏览器第一次与CAS服务端通讯,鉴权成功后由CAS服务端创建全局会话SSO会话,生成全局会话标识TGT并存在浏览器Cookie中。
    • 浏览器重定向到APP01,重写URL地址带上全局会话标识TGT。
    • APP01拿到全局会话标识TGT后向CAS服务端请求校验,若校验成功,则APP01会获取到已经登录的用户信息。
    • APP01创建局部会话Session,并将SessionID存储到浏览器Cookie中。
    • 浏览器与APP01建立会话。
  • 浏览器与APP02服务端

    • 浏览器第一次访问受保护的APP02服务端,由于未经授权而被拦截并重定向到CAS服务端。
    • 浏览器第二次与CAS服务端通讯,CAS校验Cookie中的全局会话标识TGT。
    • 浏览器重定向到APP02,重写URL地址带上全局会话标识TGT。
    • APP02 拿到全局会话标识 TGT 后向CAS服务端请求校验,若校验成功,则APP02 会获取到已经登录的用户信息。
    • APP02 创建局部会话 Session,并将 SessionID 存储到浏览器 Cookie 中。
    • 浏览器与 APP02 建立会话。

CAS架构与原理简介的更多相关文章

  1. Presto 架构和原理简介(转)

    Presto 是 Facebook 推出的一个基于Java开发的大数据分布式 SQL 查询引擎,可对从数 G 到数 P 的大数据进行交互式的查询,查询的速度达到商业数据仓库的级别,据称该引擎的性能是 ...

  2. Hbase架构与原理

    Hbase架构与原理 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就 ...

  3. kafka原理简介并且与RabbitMQ的选择

    kafka原理简介并且与RabbitMQ的选择 kafka原理简介,rabbitMQ介绍,大致说一下区别 Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和 ...

  4. Oracle Golden Gate原理简介

    Oracle Golden Gate原理简介 http://www.askoracle.org/oracle/HighAvailability/20140109953.html#6545406-tsi ...

  5. storm架构及原理

    storm 架构与原理 1 storm简介 1.1 storm是什么 如果只用一句话来描述 storm 是什么的话:分布式 && 实时 计算系统.按照作者 Nathan Marz 的说 ...

  6. Hbase架构与原理(转)

    Hbase架构与原理 HBase是一个分布式的.面向列的开源数据库,该技术来源于 Fay Chang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”.就像Bigtable利 ...

  7. Cas(01)——简介

    Cas的全称是Centeral Authentication Service,是对单点登录SSO(Single Sign On)的一种实现.其由Cas Server和Cas Client两部分组成,C ...

  8. HBase的基本架构及其原理介绍

    1.概述:最近,有一些工程师问我有关HBase的基本架构的问题,其实这个问题仅仅说架构是非常简单,但是需要理解.在这里,我觉得可以用HDFS的架构作为借鉴.(其实像Hadoop生态系统中的大部分组建的 ...

  9. storm 原理简介及单机版安装指南——详细版【转】

    storm 原理简介及单机版安装指南 本文翻译自: https://github.com/nathanmarz/storm/wiki/Tutorial 原文链接自:http://www.open-op ...

  10. SQL Server AlwaysOn架构及原理

    SQL Server AlwaysOn架构及原理 SQL Server2012所支持的AlwaysOn技术集中了故障转移群集.数据库镜像和日志传送三者的优点,但又不相同.故障转移群集的单位是SQL实例 ...

随机推荐

  1. 使用C#构建一个论文总结AI Agent

    前言 我觉得将日常生活中一些简单重复的任务交给AI Agent,是学习构建AI Agent应用一个很不错的开始.本次分享我以日常生活中一个总结论文的简单任务出发进行说明,希望对大家了解AI Agent ...

  2. (八).NET6.0添加通用的Redis功能

    1.添加包:StackExchange.Redis 2.在配置文件里面,新建Redis的有关配置信息 Name是别名,可以任意起.Ip是Redis的服务端地址,例如安装本地,就是127.0.0.1,端 ...

  3. 搭建springboot web系统

    一.集成spring-data-jpa 我在实际项目中使用mybaties居多,但是个人喜欢spring-data-jpa,在 1. 添加依赖 <!-- 数据源依赖 --> <dep ...

  4. h5 页面播放base64编码的audio数据

    例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. Sharding-JDBC分库分表

    https://blog.csdn.net/bochuangli/article/details/123029392 https://blog.csdn.net/bochuangli/article/ ...

  6. 编写高性能java程序

    为什么你写的程序运行效率不高:为什么你的程序会OutOfMemory:为什么你的程序会经常OutOfMemory:看看你的编程习惯是否符合36计1.JVM 管理两种类型的内存:堆内存(heap),栈内 ...

  7. react 计算衍生数据

    import React from 'react' import { connect } from 'react-redux' import TodoList from '../components/ ...

  8. 算法题目分享:小美的01串翻转 | dp

    最近遇到一个算法题目,感觉挺有意思,分享一下.原题和参考题解放在最后的链接中了. 题目 题目描述 小美定义一个 01 串的权值为:每次操作选择一位取反,使得相邻字符都不相等的最小操作次数. 例如,&q ...

  9. 【译】融入人工智能的 eShop – 全面的智能应用示例

    原文 | Jeremy Likness 翻译 | 郑子铭 人工智能 (AI) 是一种强大的工具,它可以增强您的应用程序,提供更好的个性化定制体验,满足客户的独特需求,同时提高内部运营的质量和效率.虽然 ...

  10. 使用 SOUI 开发高 DPI 桌面应用程序[转载]

    原文:使用 SOUI 开发高 DPI 桌面应用程序_吹泡泡的小猫的博客-CSDN博客 补充说明:soui3以后版本对dpi的支持更完善了,用起来也更简单了. 1 应用程序感知 DPI 变化 在 Win ...