单点登录CAS实现

article/2025/9/4 0:22:01

单点登录(Single Sign-On,简称SSO)是一种身份验证技术,它允许用户使用一组凭据(如用户名和密码)登录到多个应用程序或系统中,而无需在每个应用程序或系统中单独登录。这种技术可以提高用户体验,减少密码管理的负担,并提高安全性。在本文中,我们将深入探讨单点登录技术的原理、优势和实现方法。

一、单点登录的原理

单点登录的原理是基于身份验证和授权。当用户登录到一个应用程序或系统时,该应用程序或系统会向身份提供者(Identity Provider,简称IdP)发送身份验证请求。身份提供者会验证用户的凭据,并向应用程序或系统发送授权令牌。该令牌包含有关用户身份的信息,例如用户名、角色和权限。当用户尝试访问其他应用程序或系统时,这些应用程序或系统会向身份提供者发送身份验证请求,并使用之前获得的授权令牌进行授权。这样,用户就可以在多个应用程序或系统中无缝地访问资源,而无需在每个应用程序或系统中单独登录。

二、单点登录的优势

单点登录技术有许多优势,包括:

1. 提高用户体验:单点登录可以减少用户需要记住的用户名和密码数量,从而提高用户体验。用户只需要登录一次,就可以访问多个应用程序或系统。

2. 减少密码管理的负担:单点登录可以减少用户需要管理的密码数量,从而减轻密码管理的负担。用户只需要记住一个密码,就可以访问多个应用程序或系统。

3. 提高安全性:单点登录可以提高安全性,因为用户只需要在一个地方输入凭据,而不是在多个应用程序或系统中输入凭据。这可以减少密码泄露的风险,并提高身份验证的可靠性。

4. 降低成本:单点登录可以降低成本,因为它可以减少对密码重置和帐户管理的支出。此外,它还可以减少对IT支持的需求,因为用户可以自己管理他们的帐户。

三、单点登录的实现方法

单点登录可以通过多种方式实现,包括:

1. 基于Cookie的单点登录:这种方法使用Cookie来存储用户的身份验证信息。当用户登录到一个应用程序或系统时,该应用程序或系统会在Cookie中存储用户的身份验证信息。当用户尝试访问其他应用程序或系统时,这些应用程序或系统会检查Cookie中的身份验证信息,并使用该信息进行身份验证和授权。

2. 基于令牌的单点登录:这种方法使用令牌来存储用户的身份验证信息。当用户登录到一个应用程序或系统时,该应用程序或系统会向身份提供者发送身份验证请求,并获得授权令牌。当用户尝试访问其他应用程序或系统时,这些应用程序或系统会向身份提供者发送身份验证请求,并使用之前获得的授权令牌进行授权。

3. 基于SAML的单点登录:这种方法使用安全断言标记语言(Security Assertion Markup Language,简称SAML)来实现单点登录。当用户登录到一个应用程序或系统时,该应用程序或系统会向身份提供者发送身份验证请求,并获得SAML断言。当用户尝试访问其他应用程序或系统时,这些应用程序或系统会向身份提供者发送身份验证请求,并使用之前获得的SAML断言进行授权。

四、单点登录的应用场景

单点登录技术可以应用于许多场景,包括:

1. 企业内部应用程序:企业内部可能有多个应用程序或系统,例如电子邮件、CRM和ERP系统。使用单点登录技术,员工可以在这些应用程序或系统之间无缝地切换,而无需在每个应用程序或系统中单独登录。

2. 云应用程序:许多企业使用云应用程序,例如Office 365和Salesforce。使用单点登录技术,员工可以在这些应用程序之间无缝地切换,而无需在每个应用程序中单独登录。

3. 联合身份验证:许多企业需要与其他企业共享资源,例如供应链合作伙伴和客户。使用单点登录技术,这些企业可以实现联合身份验证,从而提高安全性和便利性。

五、单点登录的安全性考虑

单点登录技术可以提高安全性,但也需要考虑一些安全性问题,例如:

1. 身份提供者的安全性:身份提供者可能成为攻击者的目标,因为它存储了用户的身份验证信息。因此,身份提供者必须采取适当的安全措施,例如加密和访问控制,以保护用户的身份验证信息。

2. 令牌的安全性:令牌可能被攻击者窃取或篡改。因此,令牌必须采取一定的安全措施来保护其安全性,例如加密、签名、防伪标记等。此外,令牌的使用也需要遵循一定的安全规范,例如不要在不安全的网络环境下使用令牌,不要将令牌泄露给他人等。如果令牌被窃取或篡改,应及时采取措施,例如撤销令牌、更改密码等,以保护用户的安全。

以下是单点登录的认证过程:

  1. 用户访问应用A,应用A检测到用户未登录,将用户重定向到认证中心。

  2. 用户在认证中心输入用户名和密码进行认证。

  3. 认证中心验证用户身份,如果验证通过,生成一个令牌(Token)。

  4. 认证中心将令牌返回给应用A。

  5. 应用A将令牌发送给应用B。

  6. 应用B将令牌发送给认证中心进行验证。

  7. 认证中心验证令牌,如果验证通过,返回一个授权令牌(Access Token)。

  8. 应用B使用授权令牌访问认证中心获取用户信息。

  9. 认证中心返回用户信息给应用B。

  10. 应用B使用用户信息完成用户登录。

用户登录成功之后,会与SSO认证中心及各个子系统建立会话,用户与SSO认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过SSO认证中心,全局会话与局部会话有如下约束关系:

局部会话存在,全局会话一定存在 全局会话存在,局部会话不一定存在 全局会话销毁,局部会话必须销毁

  • 首先用户访问系统1受保护的资源,系统1发现未登陆,跳转至SSO认证中心,并将自己的参数传递过去

  • SSO认证中心发现用户未登录,将用户引导至登录页面

  • 用户输入用户名和密码提交至SSO认证中心

  • SSO认证中心校验用户信息,创建用户与SSO认证中心之间的会话,称为全局会话,同时创建授权令牌

  • SSO认证中心带着令牌跳转会最初的请求地址(系统1)

  • 系统1拿到令牌,去SSO认证中心校验令牌是否有效

  • SSO认证中心校验令牌,返回有效,注册系统1的地址

  • 系统1使用该令牌创建与用户的会话,称为局部会话,返回给用户受保护资源

  • 用户访问系统2受保护的资源

  • 系统2发现用户未登录,跳转至SSO认证中心,并将自己的地址作为参数传递过去

  • SSO认证中心发现用户已登录,跳转回系统2的地址,并附上令牌

  • 系统2拿到令牌,去SSO认证中心校验令牌是否有效

  • SSO认证中心校验令牌,返回有效,注册系统2地址

  • 系统2使用该令牌创建与用户的局部会话,返回给用户受保护资源

单点登录的实现方案: 1.cookie+redis 把用户的id,ip为key,及用户账号密码数据信息为value存放在redis中; 把用户凭证存放在cookie里,用户登录系统后,返回一个加密的cookie,然后用户访问其他系统时带上这个cookie,与sso认证中心校验,通过验证后登录 2、session广播 用户登录其中一个系统时,系统服务器会将用户登录的信息复制到另一个系统服务器中,当用户登录另一个系统时,服务器查看是否已有用户信息,如果有就会直接进行登录 3、token 用jwt生成字符串,把用户信息保存到字符串里,通过cookie或地址栏方式返回前端,前端把收到的token存放在请求中或url地址里,每次请求就可以携带token进行请求,访问其他系统时,在地址栏或者请求头里面获取token,根据字符串获取用户信息,可以把token放在redis中设置有效期

代码实现

1 Tomcat HTTPS支持

注意: 生成密钥库的时候要填的名字姓氏,一定要填域名。

# 1 生成密钥库1)d盘下面建一个文件夹cas,文件夹下面再建一个文件夹keystore(存放证书的地方)2)keytool -genkey -v -alias laohan -keyalg RSA -keystore D:\cas\keystore\laohan.keystore 输入口令(随便输,自己记得就行)
# 2 从密钥库导出证书keytool -export -trustcacerts -alias laohan -file D:/cas/keystore/laohan.cer -keystore D:/cas/keystore/laohan.keystore
# 3 将证书导入到JDK证书库keytool -import -trustcacerts -alias laohan -file D:/cas/keystore/laohan.cer -keystore "D:\java\jdk8\jre\lib\security\cacerts"密码:laohan
# 4 查看证书列表:keytool -list -keystore "D:\java\jdk8\jre\lib\security\cacerts"
# 5 删除证书keytool -delete -alias laohan -keystore "D:\java\jdk8\jre\lib\security\cacerts"

2 tomcat配置https支持

  • 打开tomcat下的conf下的server.xml文件然后放进去保存,协议 最大线程 开启ssl

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"  maxThreads="150" SSLEnabled="true" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS"keystoreFile="D:\cas\keystore\laohan.keystore"keystorePass="laohan"/>

  • 乱码 conf 找 logging.properties 文件 找到下面配置修改,把UTF-8改为下面的GBK

 java.util.logging.ConsoleHandler.encoding = GBK

  • 下载war包,放到tomcat/webapp目录下,修改war包名字为cas.war

  • 修改用户名和密码

D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\classes    如果没有,先启动一下tomcat找这个文件
application.properties打开最后一行有用户名密码
cas.authn.accept.users=casuser::Mellon

  https://localhost:8443/cas/login

3 支持数据库密码

D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\classes    找这个文件
application.propertiescas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/test?serverTimezone=GMT
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=root
cas.authn.jdbc.query[0].sql=select * from t_cas where username=?
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Drivercas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

 D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\lib下放入以下包

 4 数据库配置 t_cas

CREATE TABLE `t_cas` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(255) DEFAULT NULL,`password` varchar(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

4 支持http

D:\devlop\apache-tomcat-cas\webapps\cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json

增加http "serviceId" : "^(https|http|imaps)://.*",

4 Springboot整合

1 导入依赖

<dependency><groupId>net.unicon.cas</groupId><artifactId>cas-client-autoconfig-support</artifactId><version>2.3.0-GA</version>
</dependency><dependency><groupId>org.jasig.cas.client</groupId><artifactId>cas-client-core</artifactId><version>3.6.2</version>
</dependency><dependency><groupId>org.springframework.security</groupId><artifactId>spring-security-cas</artifactId>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2 application.yml

server:port: 7777
cas:#  cas服务端地址server-url-prefix: https://www.laohan.com:8443/cas# 没有带票据或者票据过期,定义的就是服务端的登录地址server-login-url: https://www.laohan.com:8443/cas/login#  登录成功后回调的地址client-host-url: http://www.laohan.com:8888#  类型validation-type: cas3

3 前端页面

<!DOCTYPE html>
<html  xmlns:th="http://www.thymeleaf.org"><head><meta http-equiv="Content-Type" content="text/html" charset="UTF-8"/><title>风展超市</title></head><body>欢迎:&nbsp;&nbsp;<font th:text="${session._const_cas_assertion_.principal.name}"></font>&nbsp;&nbsp;进入风展超市<br><a href="http://www.laohan.com:7777" target="_blank">后台系统</a><br><a href="http://www.laohan.com:8888" target="_blank">前台系统</a><br><br><br>&nbsp;&nbsp; <a href="/logout">安全退出</a></body>
</html>

4 后端

@Controller
@EnableCasClient
public class IndexController {/*** 网站根目录请求* @return*/@RequestMapping("/")public ModelAndView root(){//它可以返回前端页面ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName("index");return modelAndView;}/*** 退出* @return*/@RequestMapping("/logout")public String logout(){return "redirect:https://www.laohan.com:8443/cas/logout";}
}

5 再配置两个同样的服务器,端口不一样就可以了


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

相关文章

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;…

Pandas之iloc、loc

除了最基本的筛选外&#xff0c;例&#xff1a;data[‘A’] 还有loc、iloc、ix&#xff08;已不推荐使用&#xff09; 我对它们的区分&#xff0c;说loc&#xff08;location&#xff09;&#xff0c;在教室里找不认识的同学的位置一样的&#xff0c;找人肯定要知道名字或者身…