【知识科普】统一身份认证CAS

news2024/11/19 23:17:02

什么是CAS

    • 综合概述
      • 一、CAS概述
      • 二、CAS的组成与工作原理
      • 三、CAS的特性与支持
      • 四、CAS的应用场景
    • 示例展示
      • 场景设定
      • CAS认证过程
    • 其他认证细节
      • CAS认证过程的细节
      • CAS认证过程的特性
    • 参考文献

综合概述

统一身份认证CAS(Central Authentication Service),即中央认证服务,是由耶鲁大学发起的一个企业级开源项目。它是一个用于身份验证的开源框架,为Web应用系统提供了一种可靠的SSO(单点登录)解决方案。以下是对统一身份认证CAS的详细解析:

一、CAS概述

CAS主要用于为Web应用程序创建和维护单点登录会话,采用Java语言编写,使用Apache-2.0协议。它提供了一个安全可靠的方式来验证用户的身份,并且可以集成到各种Web应用程序中。通过CAS,用户可以在多个应用系统之间共享登录状态,只需登录一次,即可在多个应用系统之间自由切换,大大提高了用户的使用体验和便利性。

二、CAS的组成与工作原理

CAS由CAS Server和CAS Client两部分组成:

  1. CAS Server:单点验证服务器,负责验证用户的身份,并生成会话令牌。该令牌可以由其他应用程序用于验证用户的身份。
  2. CAS Client:共享CAS Server登录态的客户端。当用户通过浏览器访问CAS Client提供的服务资源时,CAS Client会判断用户是否已登录。若未登录,则会将用户重定向到CAS Server进行身份验证。

CAS的工作原理如下:
cas-seq

    1. 用户通过浏览器访问CAS Client的某个服务资源。
    1. CAS Client判断用户需要进行身份认证时,会携带service参数(指向用户原访问的页面)返回302状态码,指示浏览器重定向到CAS Server。
    1. 浏览器携带service参数重定向到CAS Server。
    1. CAS Server获取并校验用户cookie中携带的TGC(Ticket Granting Cookie)。若成功,则身份认证成功;否则,将用户重定向到CAS Server提供的登录页面,由用户输入用户名、密码进行身份验证。
    1. 若用户之前已登录过系统,CAS Server可以获取用户的TGC,并根据TGC获取TGT(Ticket Granting Ticket)。若用户首次登录,则CAS Server会首先生成TGT。每次验证时,CAS Server会根据TGT签发一个ST(Service Ticket),然后把ST拼接到service中,同时将相应的TGC设置到用户cookie中,并返回302状态码,指示浏览器重定向到service。
    1. 浏览器存储TGC,并携带ST重定向到service。
    1. CAS Client取得ST后,会向CAS Server请求验证该ST的有效性。
    1. 若CAS Server验证该ST有效,则告知CAS Client该用户有效,并返回用户信息。CAS Client获取用户信息后,可以使用session的形式管理用户会话。后续的交互请求无需再重定向到CAS Server,CAS Client直接返回用户请求的资源即可。

三、CAS的特性与支持

CAS构建于Spring Boot或Spring Cloud之上,支持多种协议和身份验证机制。其主要特性包括:

  1. 支持CAS v1、v2和v3协议,以及SAML v1和v2协议、OAuth v2协议、OpenID & OpenID Connect协议等。
  2. 支持通过JAAS、LDAP、RDBMS、X.509、Radius、SPNEGO、JWT、Remote、Trusted、BASIC、Apache Shiro、MongoDb、Pac4J等组件进行身份验证。
  3. 支持将身份验证委派至WS-FED、Facebook、Twitter、SAML IdP、OpenID、OpenID Connect、CAS等服务来完成。
  4. 支持通过ABAC、Time/Date、REST、Internet2的Grouper等进行授权控制。
  5. 支持通过Hazelcast、Ehcache、JPA、Memcached、Apache Ignite、MongoDb、Redis、DynamoDb、Couchbase等工具进行HA集群部署。
  6. 借助JSON、LDAP、YAML、JPA、Couchbase、MongoDb、DynamoDb、Redis等工具支持的应用程序注册。
  7. 支持通过Duo Security、YubiKey、RSA、Google Authenticator等进行多因子身份验证。

四、CAS的应用场景

CAS广泛应用于需要实现单点登录、统一身份认证和权限管理的场景中。例如:

  1. 统一身份认证:CAS可以集中管理多个应用的身份认证,用户只需登录一次,就可以在所有应用中共享登录状态。
  2. 单点登录:CAS可以实现单点登录功能,用户在一次登录后,在其他应用中自动登录。
  3. 多系统权限控制:CAS可以集中管理用户的权限信息,实现对多个系统的统一权限控制。
  4. 多系统用户管理:CAS可以集中管理用户信息,包括用户的基本信息、角色和权限等。
  5. 跨域认证:CAS可以实现跨域认证功能,允许不同域名的应用之间共享用户登录状态。
  6. 多租户应用:CAS可以支持多租户应用场景,通过配置不同的租户标识来实现不同租户之间的身份认证和权限控制。

综上所述,统一身份认证CAS作为一种高效、安全的身份验证框架,在企业级应用中具有广泛的应用前景和重要的价值。

示例展示

以下是一个实际的例子,用于说明CAS(Central Authentication Service)的认证过程:

场景设定

假设有一个大学,其内部有多个Web应用系统,如人事系统、研究生系统、科研系统等。这些系统需要实现单点登录,即用户只需在一个系统中登录一次,就可以在其他系统中自由切换而无需再次登录。为了实现这一目标,大学决定采用CAS作为统一身份认证解决方案。

CAS认证过程

  1. 用户访问系统

用户通过浏览器访问其中一个系统,如研究生系统(graduate.example.edu)。此时,系统检测到用户未登录,因此需要进行身份认证。

  1. 重定向到CAS Server

研究生系统(CAS Client)将用户重定向到CAS Server(如cas.example.edu)进行登录。重定向时,会携带一个service参数,该参数指向用户原访问的页面(即研究生系统的某个页面)。

  1. CAS Server身份认证

    • 用户到达CAS Server的登录页面,输入用户名和密码进行登录。
    • CAS Server验证用户的用户名和密码。如果验证成功,CAS Server会生成一个TGT(Ticket Granting Ticket)和一个TGC(Ticket Granting Cookie)。TGT是用户的认证票根,包含用户的认证身份、有效期等信息,并存储在CAS Server中。TGC则存储在用户的浏览器中,用于后续的身份验证。
  2. 生成ST并重定向回系统

    • CAS Server根据TGT生成一个ST(Service Ticket),这是一个一次性票据,用于CAS Client与CAS Server之间的交互。
    • CAS Server将ST拼接到service参数中,并将TGC设置到用户的cookie中。然后,CAS Server将用户重定向回原访问的页面(即研究生系统的某个页面),同时携带ST作为参数。
  3. CAS Client验证ST

    • 研究生系统(CAS Client)取得ST后,会向CAS Server请求验证该ST的有效性。
    • CAS Server验证ST的有效性。如果验证成功,CAS Server会告知研究生系统该用户有效,并返回用户信息(如学号、姓名等)。
  4. 用户会话管理

    • 研究生系统获取用户信息后,可以使用session的形式管理用户会话。后续的交互请求无需再重定向到CAS Server,研究生系统直接返回用户请求的资源即可。
    • 如果用户后续访问其他系统(如人事系统、科研系统等),这些系统也会进行类似的认证过程。但由于用户已经在CAS Server上登录过,因此这些系统可以直接通过CAS Server验证用户的身份,而无需用户再次输入用户名和密码。
  5. 单点注销

    • 当用户在一个系统中注销时(如研究生系统),该系统会通知CAS Server用户已注销。
    • CAS Server会删除与该用户相关的TGT和TGC。
    • 同时,CAS Server会通知所有已登录过的系统(如人事系统、科研系统等),要求它们也注销该用户的会话。
    • 这样,用户在其他系统中的会话也会被销毁,实现单点注销的功能。

通过以上步骤,CAS实现了在多个Web应用系统之间的单点登录和统一身份认证。用户只需在一个系统中登录一次,就可以在其他系统中自由切换而无需再次登录。同时,CAS还提供了单点注销的功能,确保用户在一个系统中注销后,在其他系统中的会话也会被销毁。

其他认证细节

CAS认证过程的细节

  1. 协议与认证机制

    CAS支持多种协议和认证机制,包括CAS协议本身、OAuth、SAML等。这使得CAS可以与各种不同的Web应用程序集成,实现单点登录的功能。在认证过程中,CAS会根据用户的选择和系统的配置,采用相应的协议和认证机制进行身份验证。

  2. 票据的管理与验证

    CAS使用票据(Ticket)来管理用户的认证状态和授权信息。票据包括TGT(Ticket Granting Ticket)和ST(Service Ticket)两种。TGT是用户的认证票根,存储在CAS Server中,用于生成ST和验证用户的身份。ST是一次性票据,用于CAS Client与CAS Server之间的交互,验证用户的授权状态。在认证过程中,CAS Server会生成并管理这些票据,确保它们的安全性和有效性。

  3. 会话管理

    CAS实现了会话管理的功能,用于跟踪用户的登录状态和会话信息。当用户登录时,CAS Server会创建一个会话,并生成相应的TGT和TGC。在后续的请求中,CAS Client会使用TGC来查找相应的TGT,从而验证用户的身份和授权状态。同时,CAS还支持会话超时、会话固定等安全特性,确保用户会话的安全性和稳定性。

  4. 多因素认证

    为了提高安全性,CAS还支持多因素认证。多因素认证是指除了用户名和密码之外,还需要用户提供其他形式的认证信息(如手机验证码、指纹识别等)才能登录系统。这可以有效防止恶意攻击和未经授权的访问。

  5. 部署与配置

    CAS的部署和配置相对简单。它可以基于Spring Boot或Spring Cloud等框架进行构建和部署,支持多种数据库和缓存技术。同时,CAS还提供了丰富的配置选项和API接口,方便用户根据实际需求进行定制和扩展。

CAS认证过程的特性

  1. 可靠性

    CAS作为一个企业级开源项目,经过了多年的发展和完善,已经成为了一种可靠的SSO解决方案。它采用了多种安全技术和机制,确保用户身份的安全性和认证过程的可靠性。

  2. 灵活性

    CAS支持多种协议和认证机制,可以与各种不同的Web应用程序集成。同时,它还提供了丰富的配置选项和API接口,方便用户根据实际需求进行定制和扩展。这使得CAS具有很高的灵活性和可扩展性。

  3. 易用性

    CAS的部署和配置相对简单,用户可以通过简单的配置和部署即可实现单点登录的功能。同时,CAS还提供了友好的用户界面和操作指南,方便用户进行使用和管理。

  4. 安全性

    CAS采用了多种安全技术和机制来确保用户身份的安全性和认证过程的可靠性。它支持多因素认证、会话管理、数据加密等安全特性,可以有效防止恶意攻击和未经授权的访问。

综上所述,CAS认证过程是一个复杂而精细的过程,它涉及多个组件和步骤的协同工作。通过采用多种安全技术和机制,CAS确保了用户身份的安全性和认证过程的可靠性。同时,CAS还支持多种协议和认证机制、具有灵活性和可扩展性、易用性和安全性等特点,使得它成为了一种广泛应用的SSO解决方案。

参考文献

小白也能看懂的OAuth2讲解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2243674.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

golang通用后台管理系统09(系统操作日志记录)

1.日志工具类 package log/**** 日志记录 wangwei 2024-11-18 15:30*/ import ("log""os""path/filepath""time" )// 获取以当前日期命名的日志文件路径 func getLogFilePath() string {currentDate : time.Now().Format("2006-…

解决微信小程序自定义tabbar点击两次才能跳转

在每个页面的js文件下加上此代码,selected属性代表每一个页面的下标,在不同的js文件下,要对应不同的selected值 代码: onShow() { // 确保 TabBar 存在并且设置选中项 if (this.getTabBar && this.getTabBar()) { this.…

golang开源框架:go开源验证框架validator

validator 单个字段格式验证 先来一个单个字段格式的验证 目录结构 在main函数中 package mainimport "awesomeProject/validate"func main() {validate.SingleFieldValidate() }在validator.go中 package validateimport ("github.com/go-playground/val…

【Rust中的项目管理】

Rust中的项目管理 前言Package,Crate,Module &use ,Path通过代码示例解释 Crate,Module ,use,Path创建一个package:代码组织化skin.rs 中的代码struct & enum 相对路径和绝对路径引用同…

大型语言模型综述 A Survey of Large Language Models

文章源自 2303.18223 (arxiv.org) 如有侵权,请通知下线 这是一篇关于大语言模型(LLMs)的综述论文,主要介绍了 LLMs 的发展历程、技术架构、训练方法、应用领域以及面临的挑战等方面,具体内容如下: 摘要…

模型的评估指标——IoU、混淆矩阵、Precision、Recall、P-R曲线、F1-score、mAP、AP、AUC-ROC

文章目录 预测框的预测指标——IoU(交并比)分类预测指标混淆矩阵(Confusion Matrix,TP、FP、FN、TN)Precision(精度)Recall(召回率)P-R曲线F1-scoreTPR、TNR、FPR、FNRROC曲线下面积…

【Android原生问题分析】夸克、抖音划动无响应问题【Android14】

1 问题描述 偶现问题,用户打开夸克、抖音后,在界面上划动无响应,但是没有ANR。回到Launcher后再次打开夸克/抖音,发现App的界面发生了变化,但是仍然是划不动的。 2 log初分析 复现问题附近的log为: 用户…

datawhale 2411组队学习:模型压缩4 模型量化理论(数据类型、int8量化方法、PTQ和QWT)

文章目录 一、数据类型1.1 整型1.2 定点数1.3 浮点数1.3.1 正规浮点数(fp32)1.3.2 非正规浮点数(fp32)1.3.3 其它数据类型1.3.4 浮点数误差1.3.5 浮点数导致的模型训练问题 二、量化基本方法2.1 int8量化2.1.1 k-means 量化2.1.2 …

ssm139选课排课系统的设计与开发+vue(论文+源码)_kaic

摘 要 互联网的普及,改变了人们正常的生活学习及消费习惯,而且也大大的节省了人们的时间,由于各种管理系统都再不断的增加,更方便了用户,也改良了很多的用户习惯。对于选课排课系统查询方面缺乏系统的管理方式&#x…

Datawhale组队学习】模型减肥秘籍:模型压缩技术3——模型量化

模型量化的目的是通过将浮点运算转换为定点运算,以减少模型大小、内存和存储需求,同时加快推理速度,降低计算功耗,使得模型在低算力设备上运行更加高效,特别适用于嵌入式设备或移动端场景。 不同数据类型(…

【MongoDB】MongoDB的集群,部署架构,OptLog,集群优化等详解

文章目录 一、引入复制集的原因二、复制集成员(一)基本成员(二)主节点(Primary)细化成员 三、复制集常见部署架构(一)基础三节点(二)跨数据中心 四、复制集保…

Javaweb梳理17——HTMLCSS简介

Javaweb梳理17——HTML&CSS简介 17 HTML&CSS简介17.1 HTML介绍17.2 快速入门17.3 基础标签17.3 .1 标题标签17.3.2 hr标签17.3.3 字体标签17.3.4 换行17.3.8 案例17.3.9 图片、音频、视频标签17.3.10 超链接标签17.3.11 列表标签17.3.12 表格标签17.3.11 布局标签17.3.…

远程管理不再难!树莓派5安装Raspberry Pi OS并实现使用VNC异地连接

前言:大家好!今天我要教你们如何在树莓派5上安装Raspberry Pi OS,并配置SSH和VNC权限。通过这些步骤,你将能够在Windows电脑上使用VNC Viewer,结合Cpolar内网穿透工具,实现长期的公网远程访问管理本地树莓派…

力扣 LeetCode 94. 二叉树的中序遍历(Day6:二叉树)

解题思路&#xff1a; 方法一&#xff1a;递归&#xff08;左中右&#xff09; class Solution {List<Integer> res new ArrayList<>();public List<Integer> inorderTraversal(TreeNode root) {recur(root);return res;}public void recur(TreeNode root…

MySQL查询执行(七):临时表

临时表重名 思考&#xff1a;临时表和内存表的区别? 内存表&#xff0c; 指的是使用Memory引擎的表&#xff0c; 建表语法是create table …enginememory。 这种表的数据都保存在内存里&#xff0c; 系统重启的时候会被清空&#xff0c; 但是表结构还在。 除了这两个特性看上…

自己动手写Qt Creator插件

文章目录 前言一、环境准备1.先看自己的Qt Creator IDE的版本2.下载源码 二、使用步骤1.参考原本的插件2.编写自定义插件1.cmakelist增加一个模块2.同理&#xff0c;qbs文件也增加一个3.插件源码 三、效果总结 前言 就目前而言&#xff0c;Qt Creator这个IDE&#xff0c;插件比…

【星海随笔】ZooKeeper-Mesos

开源的由 Twitter 与 伯克利分校的 Mesos 项目组共同研发设计。 两极调度架构 支持高可用集群&#xff0c;通过ZooKeeper进行选举。 Mesos master 管理着所有的 Mesos slave 守护进程 每个slave运行具体的任务或者服务。 Franework 包括的调度器和执行机两部分 执行器运行在Me…

集群聊天服务器(12)nginx负载均衡器

目录 负载均衡器nginx负载均衡器优势 如何解决集群聊天服务器跨服务器通信问题&#xff1f;nginx的TCP负载均衡配置nginx配置 负载均衡器 目前最多只能支持2w台客户机进行同时聊天 所以要引入集群&#xff0c;多服务器。 但是客户连哪一台服务器呢&#xff1f;客户并不知道哪一…

集群聊天服务器(3)muduo网络库

目录 基于muduo的客户端服务器编程 muduo只能装在linux中&#xff0c;依赖boost库 客户端并不需要高并发 基于muduo的客户端服务器编程 支持epoll线程池&#xff0c;muduo封装了线程池 而且还有完善的日志系统 使用muduo库代码非常固定&#xff0c;基本就只有chatserver的类名…

深入内核讲明白Android Binder【一】

深入内核讲明白Android Binder【一】 前言一、Android Binder应用编写概述二、基于C语言编写Android Binder跨进程通信Demo0. Demo简介1. 服务的管理者server_manager.c2. Binder服务端代码实现 test_service.c2.1 实现思路2.2 完整实现代码 3. Binder客户端代码实现 test_clie…