CAS单点登录原理及实现

article/2025/9/4 0:23:02

CAS单点登录原理及实现

标签(空格分隔): 单点登录 CAS SSO


###目录

  • 概念介绍
  • 搭建流程
  • 原理分析

###概念介绍

  1. CAS介绍
    Central Authentication Service(缩写CAS)是一种针对万维网的单点登录协议。它的目的是允许一个用户访问多个应用程序,而只需提供一次凭证(如用户名和密码)。它还允许web应用程序在没有获得用户的安全凭据(如密码)的情况下对用户进行身份验证。“CAS”也指实现了该协议的软件包。
  2. SSO介绍
    Single sign-on(缩写为 SSO),又译为单点登录,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一退出(single sign-off)就是指,只需要单一的退出动作,就可以结束对于多个系统的访问权限。
  3. 主要特性
    开源的、多协议的 SSO 解决方案;Protocols:Custom Protocol、CAS、 OAuth、OpenID、RESTful API、SAML1.1、SAML2.0 等。
    支持多种认证机制:Active Directory、JAAS、JDBC、LDAP、X.509 Certificates等;
    安全策略:使用票据(Ticket)来实现支持的认证协议;
    支持授权:可以决定哪些服务可以请求和验证服务票据(Service Ticket);
    提供高可用性:通过把认证过的状态数据存储在TicketRegistry组件中,这些组件有很多支持分布式环境的实现,如:BerkleyDB、Default、EhcacheTicketRegistry、JDBCTicketRegistry、JBOSS TreeCache、JpaTicketRegistry、MemcacheTicketRegistry 等;
    支持多种客户端:Java、.Net、PHP、Perl、Apache, uPortal 等。
  4. SSO 的主要实现方式
    共享 cookies
    基于共享同域的 cookie 是 Web 刚开始阶段时使用的一种方式,它利用浏览同域名之间自动传递 cookies 机制,实现两个域名之间系统令牌传递问题;另外,关于跨域问题,虽然 cookies本身不跨域,但可以利用它实现跨域的 SSO 。如:代理、暴露 SSO 令牌值等。
    缺点:不灵活而且有不少安全隐患,已经被抛弃。
    Broker-based( 基于中间件 )
    这种技术的特点就是,有一个集中的认证和用户帐号管理的服务器。经纪人给被用于进一步请求的电子身份存取。中央数据库的使用减少了管理的代价,并为认证提供一个公共和独立的 "第三方 " 。例如 Kerberos 、 Sesame 、 IBM KryptoKnight (凭证库思想 ) 等。 Kerberos是由麻省理工大学发明的安全认证服务,已经被 UNIX 和 Windows 作为默认的安全认证服务集成进操作系统。
    Agent-based (基于代理人)
    在这种解决方案中,有一个自动地为不同的应用程序认证用户身份的代理程序。这个代理程序需要设计有不同的功能。比如,它可以使用口令表或加密密钥来自动地将认证的负担从用户移开。代理人被放在服务器上面,在服务器的认证系统和客户端认证方法之间充当一个 " 翻译 "。例如 SSH 等。
    Token-based
    例如 SecureID,WebID ,现在被广泛使用的口令认证,比如 FTP 、邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令在多种应用当中使用。
    基于网关
    基于 SAML
    SAML(Security Assertion Markup Language ,安全断言标记语言)的出现大大简化了 SSO ,并被 OASIS 批准为 SSO 的执行标准 。开源组织 OpenSAML 实现了 SAML 规范。
  5. 登录流程
    访问服务:客户端发送请求访问应用系统提供的服务资源。
    定向认证:CAS客户端会重定向用户请求到CAS服务器。
    用户认证:用户身份认证。
    发放票据:CAS服务器会产生一个随机的 Service Ticket 。
    验证票据:CAS服务器验证票据 ST 的合法性,验证通过后,允许客户端访问服务。
    传输用户信息:CAS服务器验证票据通过后,传输用户认证结果信息给CAS客户端。
    流程图
  6. 相关术语
    票据
    TGC(Ticket-granting cookie):存放用户身份认证凭证的 cookie ,在浏览器和 CAS Server 间通讯时使用,并且只能基于安全通道传输( Https ),是 CAS Server 用来明确用户身份的凭证;
    ST(Service ticket):服务票据,服务的唯一标识码 , 由 CAS Server 发出( Http 传送),通过客户端浏览器到达业务服务器端;一个特定的服务只能有一个唯一的 ST ;
    PGT(Proxy-Granting ticket):由 CAS Server 颁发给拥有 ST 凭证的服务, PGT 绑定一个用户的特定服务,使其拥有向 CAS Server 申请,获得 PT 的能力; ST是基于随机数生成的 只能使用一次,并且一段时间内失效;
    PGTIOU(Proxy-Granting Ticket I Owe You) : 作用是将通过凭证校验时的应答信息由 CAS Server 返回给 CAS Client ,同时,与该 PGTIOU 对应的 PGT 将通过回调链接传给 Web 应用。 Web 应用负责维护 PGTIOU 与 PGT 之间映射关系的内容表;
    PT(Proxy Ticket):是应用程序代理用户身份对目标程序进行访问的凭证;
    TGT(Ticket Granting ticket):票据授权票据,由 KDC 的 AS 发放。即获取这样一张票据后,以后申请各种其他服务票据 (ST) 便不必再向 KDC 提交身份认证信息 (Credentials) ;
    其他相关
    AS(Authentication service):认证用服务,索取 Credentials ,发放 TGT ;
    TGS(Ticket-granting service):票据授权服务,索取 TGT ,发放 ST ;
    KDC( Key Distribution Center ):密钥发放中心;
    ###搭建流程
    CAS服务端源码下载地址
    CAS服务war包下载
    搭建流程比较简单,这里做下简单介绍:
  7. 将服务war包下载后放入tomcat中部署运行
    这里有点需要注意下
    CAS默认使用的是HTTPS协议,如果对安全要求不高,可使用HTTP协议。下面就是修改一些配置,让CAS使用HTTP协议。
    (1)修改cas的WEB-INF/deployerConfigContext.xml
    找到下面的配置
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
p:httpClient-ref="httpClient"/>

这里需要增加参数p:requireSecure=“false”,requireSecure属性意思为是否需要安全验证,即HTTPS,false为不采用
(2)修改cas的/WEB-INF/spring-configuration/ticketGrantingTicketCookieGenerator.xml
找到下面配置

<bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"p:cookieSecure="true"p:cookieMaxAge="-1"p:cookieName="CASTGC"p:cookiePath="/cas" />

参数p:cookieSecure=“true”,同理为HTTPS验证相关,TRUE为采用HTTPS验证,FALSE为不采用https验证。
参数p:cookieMaxAge="-1",是COOKIE的最大生命周期,-1为无生命周期,即只在当前打开的窗口有效,关闭或重新打开其它窗口,仍会要求验证。可以根据需要修改为大于0的数字,比如3600等,意思是在3600秒内,打开任意窗口,都不需要验证。
我们这里将cookieSecure改为false , cookieMaxAge 改为3600
(3)修改cas的WEB-INF/spring-configuration/warnCookieGenerator.xml
找到下面配置

<bean id="warnCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"
p:cookieSecure="true"
p:cookieMaxAge="-1"
p:cookieName="CASPRIVACY"
p:cookiePath="/cas" />

我们这里将cookieSecure改为false , cookieMaxAge 改为3600
2. CAS客户端需要引入客户端包,添加如下pom:

<!-- cas -->  
<dependency>  <groupId>org.jasig.cas.client</groupId>  <artifactId>cas-client-core</artifactId>  <version>3.3.3</version>  
</dependency>      

配置相应的web.xml:

 <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置 -->  
<listener>  <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>  
</listener>  
<!-- 该过滤器用于实现单点登出功能,可选配置。 -->  
<filter>  <filter-name>CAS Single Sign Out Filter</filter-name>  <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>  
</filter>  
<filter-mapping>  <filter-name>CAS Single Sign Out Filter</filter-name>  <url-pattern>/*</url-pattern>  
</filter-mapping>  
<!-- 该过滤器负责用户的认证工作,必须启用它 -->  
<filter>  <filter-name>CASFilter</filter-name>       <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>  <init-param>  <param-name>casServerLoginUrl</param-name>  <param-value>http://localhost:9100/cas/login</param-value>  <!--这里的server是服务端的IP -->  </init-param>  <init-param>  <param-name>serverName</param-name>  <param-value>http://localhost:9001</param-value></init-param>  
</filter>  
<filter-mapping>  <filter-name>CASFilter</filter-name>  <url-pattern>/*</url-pattern>  
</filter-mapping>  
<!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->  
<filter>  <filter-name>CAS Validation Filter</filter-name>  <filter-class>     org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>  <init-param>  <param-name>casServerUrlPrefix</param-name>  <param-value>http://localhost:9100/cas</param-value>  </init-param>  <init-param>  <param-name>serverName</param-name>  <param-value>http://localhost:9001</param-value></init-param>  
</filter>  
<filter-mapping>  <filter-name>CAS Validation Filter</filter-name>  <url-pattern>/*</url-pattern>  
</filter-mapping>  
<!-- 该过滤器负责实现HttpServletRequest请求的包裹, 比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。 -->  
<filter>  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  <filter-class>  org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>  
</filter>  
<filter-mapping>  <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>  <url-pattern>/*</url-pattern>  
</filter-mapping>  
<!-- 该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。 比如AssertionHolder.getAssertion().getPrincipal().getName()。 -->  
<filter>  <filter-name>CAS Assertion Thread Local Filter</filter-name>       <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>  
</filter>  
<filter-mapping>  <filter-name>CAS Assertion Thread Local Filter</filter-name>  <url-pattern>/*</url-pattern>  
</filter-mapping> 

###原理分析
这里我们通过官方的两个流程图来熟悉下其原理:
基础模式
cas时序图
代理模式
cas_proxy时序图


http://chatgpt.dhexx.cn/article/w6oRfDYI.shtml

相关文章

单点登录CAS实现

单点登录&#xff08;Single Sign-On&#xff0c;简称SSO&#xff09;是一种身份验证技术&#xff0c;它允许用户使用一组凭据&#xff08;如用户名和密码&#xff09;登录到多个应用程序或系统中&#xff0c;而无需在每个应用程序或系统中单独登录。这种技术可以提高用户体验&…

CAS单点登录原理及改造

CAS是由耶鲁大学开发的单点登录系统&#xff0c;其核心的知识点包括以下几个概念: 1) TGT: 票据&#xff0c;或称大令牌&#xff0c;在登录成功之后生成&#xff0c;其中包含了用户信息 2) TGC: TGT的key&#xff0c;TGT存储在session中&#xff0c;TGC以cookie形式保存在浏览器…

SSO单点登录原理详解(从入门到精通)

本文主要对SSO单点登录与CAS、OAuth2.0两种授权协议的关系和原理进行详细说明。 1. 基础概念 SSO单点登录&#xff08;Single sign-on&#xff09; 所谓单点登录就是在多个应用系统中&#xff0c;用户只需登录一次就可以访问所有相互信任的系统。 CAS 中央认证服务&#xf…

CAS单点登录的实现

这篇文章对CAS单点登录具体实现的一些步骤就行讲述&#xff0c;至于CAS单点登录的实现原理分析&#xff0c;请参看下面这篇文章&#xff1a;CAS单点登录原理分析(一) https://blog.csdn.net/qq_41258204/article/details/84036875 CAS 包含两个部分&#xff1a; CAS Server 和…

CAS单点登录原理解析

推荐阅读 1. SpringBoot 整合篇 2. 手写一套迷你版HTTP服务器 3. 记住&#xff1a;永远不要在MySQL中使用UTF-8 4. Springboot启动原理解析 1、基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理&#xff1a; 将用户名密码加密之后存于Cookie中&#xff0c;之后访…

CAS单点登录的实现(二)

这篇文章对CAS单点登录具体实现的一些步骤就行讲述&#xff0c;至于CAS单点登录的实现原理分析&#xff0c;请参看下面这篇文章&#xff1a; CAS单点登录原理分析(一) https://blog.csdn.net/qq_41258204/article/details/84036875 CAS 包含两个部分&#xff1a; CAS Server 和…

CAS单点登录系列之原理简单介绍

文章目录 一、 SSO简介1.1 单点登录定义1.2 单点登录角色1.3 单点登录分类 二、 CAS简介2.1 CAS简单定义2.2 CAS体系结构2.3 CAS原理 三、CAS服务端部署附录 一、 SSO简介 1.1 单点登录定义 单点登录(Single sign on)&#xff0c;英文名称缩写SSO&#xff0c;SSO的意思就是在…

CAS实现单点登录SSO执行原理探究(终于明白了)

一、不落俗套的开始 1、背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架。 2、盗一张学习CAS绝大多都看过的图以及执…

CAS实现单点登录

1.简介 SSO单点登录 在多个相互信任的系统中&#xff0c;用户只需要登录一次就可以访问其他受信任的系统。 新浪微博与新浪博客是相互信任的应用系统。 *当用户首次访问新浪微博时&#xff0c;新浪微博识别到用户未登录&#xff0c;将请求重定向到认证中心&#xff0c;认证中心…

cas server + cas client 单点登录 原理介绍

CAS 介绍 CAS 是 Yale 大学发起的一个开源项目&#xff0c;旨在为 Web 应用系统提供一种可靠的单点登录方法&#xff0c;CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。CAS 具有以下特点&#xff1a; 开源的企业级单点登录解决方案。 CAS Server 为需要独立部署的 Web 应用…

CAS单点登录原理(包含详细流程,讲得很透彻,耐心看下去一定能看明白!)

转载地址 http://www.cnblogs.com/lihuidu/p/6495247.html 1、基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理&#xff1a; 将用户名密码加密之后存于Cookie中&#xff0c;之后访问网站时在过滤器&#xff08;filter&#xff09;中校验用户权限&#xff0c;如果没有…

CAS方式实现单点登录

单点登录&#xff0c;英文是 Single Sign On&#xff0c;缩写为 SSO。 多个站点(192.168.1.20X)共用一台认证授权服务器(192.168.1.110&#xff0c;用户数据库和认证授权模块共用)。用户经由其中任何一个站点(比如 192.168.1.201)登录后&#xff0c;可以免登录访问其他所有站点…

单点登录之CAS原理和实现

1.开源单点登录系统CAS入门 1.1 什么是单点登录 单点登录&#xff08;Single Sign On&#xff09;&#xff0c;简称为 SSO&#xff0c;是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用…

CAS单点登录原理分析(一)

一&#xff0c;业务分析 在分布式系统架构中&#xff0c;假设把上述的三个子系统部署在三个不同的服务器上。前提是用户登录之后才能访问这些子系统。那么使用传统方式&#xff0c;可能会存在这样的问题&#xff1a; 1.当访问用户中心&#xff0c;需要用户登录帐号 2.当访问购物…

cas单点登录原理与实现(整合springsecurity)

一、cas原理分析 SSO英文全称Single Sign On&#xff0c;单点登录。SSO是在多个应用系统中&#xff0c;用户只需要登录一次就可以访问所有相互信任的应用系统。CAS是一种基于http协议的B/S应用系统单点登录实现方案&#xff0c;认识CAS之前首先要熟悉http协议、Session与Cookie…

CAS 实现单点登录(SSO)原理

原地址&#xff1a;https://blog.csdn.net/hejingyuan6/article/details/44277023 一、概念&#xff1a;     单点登录&#xff08;Single Sign On&#xff09;&#xff1a;简称为SSO&#xff0c;是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中…

CAS单点登录原理

转载地址&#xff1a;转载博客 1、基于Cookie的单点登录的回顾 基于Cookie的单点登录核心原理&#xff1a; 将用户名密码加密之后存于Cookie中&#xff0c;之后访问网站时在过滤器&#xff08;filter&#xff09;中校验用户权限&#xff0c;如果没有权限则从Cookie中取出用户…

python iloc函数_如何使用python语言中pandas模块中的iloc方法

在python语言中,pandas模块中的iloc方法,可以截取矩阵,获取部分矩阵元素、行和列。下面利用实例说明iloc方法的用法,操作如下: 工具/原料 python pycharm 截图工具 方法/步骤 1 打开pycharm工具,新建python文件,导入numpy和pandas,调用DataFrame生成矩阵 2 保存…

python iloc和loc切片

文章目录 一、含正负号的下标二、loc和iloc1. 利用loc、iloc提取行数据2. 利用loc、iloc提取列数据3.利用loc、iloc提取指定行、指定列数据4.利用loc、iloc提取所有数据5.利用loc函数&#xff0c;根据某个数据来提取数据所在的行 一、含正负号的下标 正下标从0开始&#xff0c;…