CAS单点登录简单介绍及简单使用
2022-12-14 17:33:39 0 举报
AI智能生成
登录查看完整内容
单点登录
作者其他创作
大纲/内容
CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS是耶鲁大学(Yale University)发起的一个开源项目,旨在为Web应用系统提供一种可靠的单点登录方法,CAS在2004年12月正式成为JA-SIG的一个项目;CAS为CS架构
简介:
开源的企业级单点登录解决方案
CAS Server为需要独立部署的Web应用
CAS Client支持非常多的客户端(这里指单点登录系统中的各个Web应用),包括Java,Net,PHP,Perl,Apache,uPortal,Ruby等。
CAS属于Apache2.0许可证,允许代码修改,再发布(作为开源或商业软件)
特点:
原理图
工作原理图
从结构上看,CAS 包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。图1 是 CAS 最基本的协议过程: CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护受保护的资源。对于访问受保护资源的每个 Web 请求,CAS Client 会分析该请求的 Http 请求中是否包含 Service Ticket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的 CAS Server 登录地址,并传递 Service (也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第 3 步中输入认证信息,如果登录成功,CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket,并缓存以待将来验证,之后系统自动重定向到 Service 所在地址,并为客户端浏览器设置一个 Ticket Granted Cookie(TGC),CAS Client 在拿到 Service 和新产生的 Ticket 过后,在第 5,6 步中与 CAS Server 进行身份核实,以确保 Service Ticket 的合法性。 在该协议中,所有与 CAS 的交互均采用 SSL 协议,确保,ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向的过程,但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的。 另外,CAS 协议中还提供了 Proxy (代理)模式,以适应更加高级、复杂的应用场景,具体介绍可以参考 CAS 官方网站上的相关文档。
1、访问服务:SSO客户端发送请求访问应用系统提供的服务资源。2、重定向认证:SSO客户端会重定向用户请求到SSO服务器。3、用户验证:用户身份认证。4、生成票据:SSO服务器会产生一个随机的Service Ticket。5、验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。6、传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。
实现原理
cas架构图,CS架构
CAS架构
实现流程
1、用户在单点登录服务器的登录页面中,输入用户名和密码。2、然后单点登录服务器会对用户名和密码进行认证。认证本身并不是单点登录服务器的功能,因此,通常会引入某种认证机制。认证机制可以有很多种,例如自己写一个认证程序,或者使用一些标准的认证方法,例如LDAP或者数据库等等。在大多数情况下,会使用LDAP进行认证。这是因为LDAP在处理用户登录方面,有很多独特的优势,这在本文的后面还会比较详细地进行介绍。3、认证通过之后,单点登录服务器会和应用程序进行一个比较复杂的交互,这通常是某种授权机制。CAS使用的是所谓的Ticket。具体这点后面还会介绍。4、授权完成后,CAS把页面重定向,回到Web应用。Web应用此时就完成了成功的登录(当然这也是单点登录的客户端,根据返回的Ticket信息进行判断成功的)。5、然后单点登录服务器会在客户端创建一个Cookie。注意,是在用户的客户端,而不是服务端创建一个Cookie。这个Cookie是一个加密的Cookie,其中保存了用户登录的信息。6、如果用户此时希望进入其他Web应用程序,则安装在这些应用程序中的单点登录客户端,首先仍然会重定向到CAS服务器。不过此时CAS服务器不再要求用户输入用户名和密码,而是首先自动寻找Cookie,根据Cookie中保存的信息,进行登录。登录之后,CAS重定向回到用户的应用程序。
CAS流程
1、浏览器第一次访问受保护的APP01服务端,由于未经授权而被拦截并重定向到CAS服务端。2、浏览器第一次与CAS服务端通讯,鉴权成功后由CAS服务端创建全局会话SSO会话,生成全局会话标识TGT并存在浏览器Cookie中。3、浏览器重定向到APP01,重写URL地址带上全局会话标识TGT。4、APP01拿到全局会话标识TGT后向CAS服务端请求校验,若校验成功,则APP01会获取到已经登录的用户信息。5、APP01创建局部会话Session,并将SessionID存储到浏览器Cookie中。6、浏览器与APP01建立会话。
浏览器与APP01服务端
1、浏览器第一次访问受保护的APP02服务端,由于未经授权而被拦截并重定向到CAS服务端。2、浏览器第二次与CAS服务端通讯,CAS校验Cookie中的全局会话标识TGT。3、浏览器重定向到APP02,重写URL地址带上全局会话标识TGT。4、APP02 拿到全局会话标识 TGT 后向CAS服务端请求校验,若校验成功,则APP02 会获取到已经登录的用户信息。5、APP02 创建局部会话 Session,并将 SessionID 存储到浏览器 Cookie 中。6、浏览器与 APP02 建立会话。
浏览器与APP02服务端
CAS应用交互详解
原理和协议:
CAS介绍
CAS采用HTTPS协议处理用户请求,需要配置Tomcat支持HTTPS协议
采用JDK自带的keytool工具生成秘钥库
别名java1234 存储路径D:\\cas\\keystore
keytool -genkey -v -alias java1234 -keyalg RSA -keystore D:\\cas\\keystore\\java1234.keystore
java1234:别名RSA:加密方式D:\\cas\\keystore\\java1234.keystore:存储路径
生成秘钥库
keytool -export -trustcacerts -alias java1234 -file D:/cas/keystore/java1234.cer -keystore D:/cas/keystore/java1234.keystore
导出证书
生成的证书文件
从秘钥库里导出证书
keytool -import -trustcacerts -alias java1234 -file D:/cas/keystore/java1234.cer -keystore \"D:/Program Files/Java/jdk1.8.0_221/jre/lib/security/cacerts\"
专门的密码:changeit
导入证书
将证书导入到JDK证书库
采用的是tomcat8
找到tomcat-》conf-》server.xml打开文件添加
<Connector port=\"8843\" protocol=\"org.apache.coyote.http11.Http11NioProtocol\" maxThreads=\"150\" SSLEnabled=\"true\" scheme=\"https\" secure=\"true\" clientAuth=\"false\" sslProtocol=\"TLS\" keystoreFile=\"D:\\cas\\keystore\\java1234.keystore\" keystorePass=\"123456\"/>
8843:端口org.apache.coyote.http11.Http11NioProtocol:协议150:最大线程SSLEnabled:是否开启SSLD:\\cas\\keystore\\java1234.keystore:存储路径123456:密码
默认有中文乱码,可以我们来到tomcat目录的conf子目录中,找到一个名为“logging.properties”的文件,打开这个文本文件,找到如下配置项: java.util.logging.ConsoleHandler.encoding = UTF-8将UTF-8修改为GBK保存,重启tomcat
解决乱码
启动bin下的startup.bat
tomcat配置https支持
正常访问tomcat
tomcat默认访问路径是localhost:8080
配好后访问tomcat
配好后访问:https://localhost:8843
测试
搭建Tomcat HTTPS支持
CAS官网
官网:https://www.jasig.org
cas的github官网
github官网:https://github.com/apereo/cas
https://github.com/apereo/cas-overlay-template
https://repo1.maven.org/maven2/cas
cas服务端
https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/5.3.14
打包好的war包网址:
CAS Server war下载
下载war包
把打包好的war包下载好
war包
找到tomcat安装目录,进入webapps文件夹,把下载好的war包方到此处
启动tomcat
进入bin目录,双击startup.bat文件运行tomcat,tomcat会自动解压下载的war包
改名
启动后产生解压文件,名称过长为了方便改名为cas
关闭tomcat,从新启动tomcat
访问cas
访问:https://localhost:8843/cas
配置hosts:C:\\Windows\\System32\\drivers\\etc
设置域名访问
打开hosts文件添加:127.0.0.1 java1234.com
域名访问
访问:https://java1234.com:8843/cas
打开tomcat目录,进入解压好的war包,WEB-INF->classes
casuser:用户名;Mellon:密码
打开application.properties文件
查看用户名密码
日志存储路径
打开log4j2.xml文件修改日志存储路径
CAS Server发布到tomcat
t_cas.sql文件
创建数据库
注释认证用户
把写死的用户名和密码注释掉
修改application.properties配置文件
在application.properties配置文件中添加连接数据库配置
四个jar包
jdbc和mysql的jar包
复制jdbc和mysql的jar包到项目WEB-INF-》lib下
重新启动tomcat
重新访问
用户名和密码
登录成功
输入数据库里的用户名和密码
测试:
配置数据源,数据库用户认证
MD5加密
修改application.properties文件
把数据库密码修改为加密后的密码,使用MD5加密:SELECT MD5('123456')
进行测试
密码加密校验
CAS Server服务端搭建
创建父工程导入依赖
创建子工程导入依赖
子工程创建application.yml配置文件并设置端口
在resources文件夹下创建html文件
访问
启动服务进行访问
子工程添加依赖
启动类上加上@EnableCasClient注解
application.yml配置文件添加cas配置
创建ModelAndView对象
设置该对象的ViewName名称为\"index\
把该对象进行返回
controller层添加一个接口
pom.xml文件
application.yml文件
index.html文件
启动类
Controller层
代码:
跳转CAS
修改后图
打开HTTPSandIMAPS-10000001.json文件,将\"serviceId':\"^(https|imaps)://.*\"修改成\"serviceId':\"^(https|imaps|http)://.*\"
进入application.properties文件添加cas.tgc.secure=falsecas.serviceRegistry.initFromJson=true
解决方式:
报错原因是cas服务默认不支持http请求,可以通过配置来让其支持http请求打开tomcat安装目录:webapps\\cas\\WEB-INF\\classes\\services修改HTTPSandIMAPS-10000001.json文件
未登录实现跳转到CAS登录
CAS Client+springboot客户端整合搭建
欢迎: <font th:text=\"${session._const_cas_assertion_.principal.name}\"></font> 进入crm客户关系;
在html文件中添加
显示用名
<a href=\"/logout\">安全退出</a>
在Controller层添加退出接口,就是重定向到服务端的logout
注销
复制一个服务出来并修改端口以及访问的路径
同时启动两个服务
服务A
服务B
访问任意一个服务如果没有登录会跳转登录,登录后另一个访问可以直接访问
CAS代码示例
代码示例:
CAS单点登录实例实现+测试
CAS单点登录
0 条评论
回复 删除
下一页