CAS实现SSO单点登录之服务搭建

CAS单点登录

1. What is CAS?

1. 官网及文档

CAS官网:https://www.apereo.org/projects/cas

CAS Server GitHub下载地址: https://github.com/apereo/cas

文档地址:https://apereo.github.io/cas/5.3.x/

https://github.com/apereo/cas-overlay-template

https://repo1.maven.org./maven2/cas/

2. 关于CAS

Central Authentication Service (CAS),中央认证服务,是一个企业多语言单点登录解决方案。

Enterprise Single Sign-On - CAS provides a friendly open source community that actively supports and contributes to the project. While the project is rooted in higher-ed open source, it has grown to an international audience spanning Fortune 500 companies and small special-purpose installations.

企业单一登录-CAS提供了一个友好的开源社区,该社区积极支持该项目并为该项目做出贡献。尽管该项目以更高版本的开源为根基,但已经吸引了国际读者,涵盖了《财富》 500强公司和小型专用装置。

CAS provides enterprise single sign-on service for the Web:

  • An open and well-documented protocol
  • An open-source Java server component
  • Pluggable authentication support (LDAP, database, X.509, 2-factor)
  • Support for multiple protocols (CAS, SAML, OAuth, OpenID)
  • A library of clients for Java, .Net, PHP, Perl, Apache, uPortal, and others
  • Integrates with uPortal, BlueSocket, TikiWiki, Mule, Liferay, Moodle and others
  • Community documentation and implementation support
  • An extensive community of adopters

CAS为Web提供企业单一登录服务:

  • 一个开放且有据可查的协议
  • 开源Java服务器组件
  • 可插拔身份验证支持(LDAP,数据库,X.509、2因子)
  • 支持多种协议(CAS,SAML,OAuth,OpenID)
  • Java,.Net,PHP,Perl,Apache,uPortal等客户端的库
  • 与uPortal,BlueSocket,TikiWiki,Mule,Liferay,Moodle等集成
  • 社区文档和实施支持
  • 广泛的采用者社区

3. CAS-Java-Client-Downlaod

下载地址:https://github.com/apereo/java-cas-client

找到版本号可直接下载,如下:

https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/5.3.16/cas-server-webapp-tomcat-5.3.16.war

https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/6.3.4/cas-server-webapp-tomcat-6.3.4.war

https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/6.3.3/cas-server-webapp-tomcat-6.3.3.war

Maven仓库war包下载地址:

https://mvnrepository.com/artifact/org.apereo.cas/cas-server-webapp-tomcat

https://mvnrepository.com/artifact/org.apereo.cas/cas-server-webapp-tomcat/6.3.0

如下载5.3.16版本

https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/5.3.16/cas-server-webapp-tomcat-5.3.16.war

2. Docker安装

地址:https://hub.docker.com/r/apereo/cas

  1. 镜像拉取
docker pull apereo/cas:6.3.3
  1. 启动cas容器
docker run  --name cas -p 8443:8443 -p 8442:8080  apereo/cas /bin/sh /cas-overlay/bin/run-cas.sh
  1. 启动容器会有漫长的等待,然后提示没有ssl证书
Caused by: java.io.FileNotFoundException: /etc/cas/thekeystore (No such file or directory)at java.base/java.io.FileInputStream.open0(Native Method)at java.base/java.io.FileInputStream.open(Unknown Source)at java.base/java.io.FileInputStream.<init>(Unknown Source)at java.base/java.io.FileInputStream.<init>(Unknown Source)at java.base/sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)at java.base/sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)at org.apache.catalina.startup.CatalinaBaseConfigurationSource.getResource(CatalinaBaseConfigurationSource.java:121)at org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:197)at org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:207)at org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:282)at org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:246)at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97)... 33 more
  1. 生成证书
  • unbuntu中生成方法如下:
sudo keytool -genkeypair -alias cas -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -dname "CN=cas,OU=cas,OU=cas,C=cas"  -ext SAN="dns:localhost,ip:127.0.0.1"
  • windows下查看生成密钥库
  1. 证书生成后,将ssl证书复制到容器内
docker cp server.keystore cas:/etc/cas/thekeystore
  1. 配置完毕,重启容器
docker restart cas
  1. 访问
访问地址:https://127.0.0.1:8443/cas/login
初始用户名:casuser
初始密码:Mellon

3. Tomcat中搭建HTTPS请求的支持

CAS采用https协议处理用户请求,所以必须需要配置Tomcat对https协议的支持

1. 生成密钥库

采用JDK自带的keytool工具生成密钥库

在D:\cas\生成一个别名为yuan-key的密钥库

keytool -genkey -v -alias yuan-key -keyalg RSA -keystore D:\cas\yuan-key.keystore

命令行输出如下:

C:\Users\infodba>keytool -genkey -v -alias yuan-key -keyalg RSA -keystore d:\cas\yuan-key.keystore
输入密钥库口令: yuan123456
再次输入新口令: yuan123456
您的名字与姓氏是什么?[Unknown]:  jinshengyuan.com(这里很重要配置的就是域名,在windows\system32\driver\etchost文件里配置好)
您的组织单位名称是什么?[Unknown]:  yuan
您的组织名称是什么?[Unknown]:  yuan
您所在的城市或区域名称是什么?[Unknown]:  shanxi
您所在的省/市/自治区名称是什么?[Unknown]:  xian
该单位的双字母国家/地区代码是什么?[Unknown]:  zh
CN=yuan, OU=yuan, O=yuan, L=shanxi, ST=xian, C=zh是否正确?[否]:  y正在为以下对象生成 2,048 位RSA密钥对和自签名证书 (SHA256withRSA) (有效期为 90 天):CN=yuan, OU=yuan, O=yuan, L=shanxi, ST=xian, C=zh
输入 <yuan-key> 的密钥口令(如果和密钥库口令相同, 按回车):
[正在存储d:\cas\yuan-key.keystore]Warning:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore d:\cas\yuan-key.keystore -destkeystore d:\cas\yuan-key.keystore -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。C:\Users\infodba>

根据提示迁移得到行业标准格式,也可以不迁移:

C:\Users\infodba>keytool -importkeystore -srckeystore d:/cas/yuan-key.keystore -destkeystore d:/cas/yuan-key.keystore -deststoretype pkcs12
输入源密钥库口令:
已成功导入别名 yuan-key 的条目。
已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消Warning:
已将 "d:/cas/yuan-key.keystore" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "d:/cas/yuan-key.keystore.old" 进行了备份。

2. 从密钥库导出证书

keytool -export -trustcacerts -alias yuan-key -file d:/cas/yuan-key.cer -keystore d:/cas/yuan-key.keystore

命令行中提示输入密钥口令,就是上面的yuan123456

C:\Users\infodba>keytool -export -trustcacerts -alias yuan-key -file d:/cas/yuan-key.cer -keystore d:/cas/yuan-key.keystore
输入密钥库口令:
存储在文件 <d:/cas/yuan-key.cer> 中的证书

3. 将证书导入到JDK证书库中

命令:

keytool -import -trustcacerts -alias yuan-key -file d:/cas/yuan-key.er -keystore "D:\Program Files\Java\jdk1.8.0_202\jre\lib\security\cacerts"

执行命令:

C:\Users\infodba>keytool -import -trustcacerts -alias yuan-key -file d:/cas/yuan-key.cer -keystore "D:\Program Files\Java\jdk1.8.0_202\jre\lib\security\cacerts"
输入密钥库口令: yuan123456
keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect
  • 注意出现上面的错误是因为输入了错误密码 yuan123456,这里的密码是jdk下cacerts所特有的密码 “changeit”

正确的执行如下:

C:\Users\infodba>keytool -import -trustcacerts -alias yuan-key -file d:/cas/yuan-key.cer -keystore "D:\Program Files\Java\jdk1.8.0_202\jre\lib\security\cacerts"
输入密钥库口令:
所有者: CN=yuan, OU=yuan, O=yuan, L=shanxi, ST=xian, C=zh
发布者: CN=yuan, OU=yuan, O=yuan, L=shanxi, ST=xian, C=zh
序列号: 424e20f1
有效期为 Wed Jan 27 20:28:02 CST 2021 至 Tue Apr 27 20:28:02 CST 2021
证书指纹:MD5:  EF:17:47:78:0B:40:DF:3A:49:B4:29:E4:6E:24:57:ECSHA1: 56:D6:89:3E:7E:BD:D0:42:A3:B6:12:33:BE:6D:96:AC:87:90:99:24SHA256: 8E:33:25:6B:F9:C0:AF:74:05:21:AB:0C:02:01:61:88:46:41:5A:27:EF:53:49:29:7D:52:BE:CD:64:60:01:08
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 3扩展:#1: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: D2 5E 14 C9 B3 28 06 91   8A F5 92 FA E0 FF B2 67  .^...(.........g
0010: CD 24 B1 66                                        .$.f
]
]是否信任此证书? []:  y
证书已添加到密钥库中

4.Tomcat中的Server.xml配置https协议的支持

D:\apache-tomcat-9.0.41\conf\server.xml中添加如下配置:

<Connector port="8444" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150"SSLEnabled="true" scheme="https"secure="true"clientAuth="false"sslProtocol="TLS"keystoreFile="d:\cas\yuan-key.keystore"keystorePass="yuan123456"/>

5. 下载CAS Server端部署到Tomcat中

  1. 下载cas-server-webapp-tomcat-5.3.16.war版本的CAS Server

https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/5.3.16/cas-server-webapp-tomcat-5.3.16.war

  1. 将下载的cas-server-webapp-tomcat-5.3.16.war重命名为cas.war并拷贝到Tomcat下的webapps下

  2. 启动tomcat

  3. 输入地址访问:https://localhost:8444/cas

  4. 输入用户名与密码进行验证CAS服务器是否搭建成功

    用户名/密码:casuser/Mellon

    用户名密码具体在:D:\apache-tomcat-9.0.41\webapps\cas\WEB-INF\classes\application.properties中进行配置

    cas.authn.accept.users=casuser::Mellon

6. CAS配置数据源

1.application.properties中配置数据源

2. 加入连接数据源的驱动到lib中

4. 常见问题处理:

1. 未认证授权的服务

CAS的服务记录是空的,没有定义服务。 希望通过CAS进行认证的应用程序必须在服务记录中明确定义。

解决办法:

1、修改配置文件wabapp\cas根目录\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json

“serviceId” : “^(https|imaps)😕/."
改为
“serviceId” : "^(https|http|imaps)😕/.
”,
2、修改配置文件wabapp\cas根目录\WEB-INF\classes\application.properties,追加下面两行代码
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

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

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

相关文章

Markdown 流程图绘制详解

✍️作者简介&#xff1a;小北编程&#xff08;专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向&#xff09; &#x1f433;博客主页&#xff1a; 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN &#x1f514;如果文章对您有一定的帮助请&#x1f…

Python图像处理实战:使用PIL库批量添加水印的完整指南【第27篇—python:Seaborn】

文章目录 1. 简介2. PIL库概述3. PIL库中涉及的类4. 实现原理5. 实现过程5.1 原始图片5.2 导入相关模块5.3 初始化数据5.4 水印字体设置5.5 打开原始图片并创建存储对象5.6 计算图片和水印的大小5.7 选择性设置水印文字5.8 绘制文字并设置透明度5.9 遍历获取图片文件并调用绘制…

超简单的node爬虫小案例

同前端爬取参数一样&#xff0c;输入三个参数进行爬取 注意点也一样&#xff1a; 注意分页的字段需要在代码里面定制化修改&#xff0c;根据你爬取的接口&#xff0c;他的业务规则改代码中的字段。比如我这里总条数叫total&#xff0c;人家的不一定。返回的数据我这里是data.r…

内存泄漏检测方式

一 、 日志记录 通过宏定义重载了 malloc 和 free 函数&#xff0c;以在分配和释放内存的时候记录一些信息&#xff0c;包括文件名和行号&#xff0c;并将这些信息写入到相应的文件中。然后在 main 函数中演示了使用这些宏进行内存分配和释放。 _malloc 函数&#xff1a; 在分配…

基于java web的机票管理系统设计与实现设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

中国康复辅助器具协会脊柱侧弯康复技术委员会成立大会圆满召开

2024年1月13日,由中国康复辅助器具协会主办,中国康复辅助器具协会脊柱侧弯康复辅助器具技术专业委员会承办,北京蓝田医疗设备有限公司协办,中国康复辅助器具协会脊柱侧弯康复辅助器具技术专业委员会成立大会暨脊柱侧弯康复辅助器具技术交流会在北京市山西大厦隆重召开。本次会议…

Linux -- firewalld的富语言规则

1. Firewalld支持两种类型的NAT&#xff1a;IP地址伪装和端口转发。 &#xff08;1&#xff09;IP地址伪装 地址伪装&#xff08;masquerade)&#xff1a;通过地址伪装&#xff0c;NAT 设备将经过设备的包转发到指定接收方&#xff0c;同时将通过的数据包的源地址更改为其自己的…

【Vue技巧】vue3中不支持.sync语法糖的解决方案

海鲸AI-ChatGPT4.0国内站点&#xff0c;支持设计稿转代码&#xff1a;https://www.atalk-ai.com 在 Vue 3 中&#xff0c;.sync 修饰符已经被移除。在 Vue 2 中&#xff0c;.sync 修饰符是一个语法糖&#xff0c;用于简化子组件和父组件之间的双向数据绑定。在 Vue 3 中&#x…

基于SSM的流浪动物救助网站的设计与实现-计算机毕业设计源码82131

摘 要 随着生活水平的持续提高和家庭规模的缩小&#xff0c;宠物已经成为越来越多都市人生活的一部分&#xff0c;随着宠物的增多&#xff0c;流浪的动物的日益增多&#xff0c;中国的流浪动物领养和救助也随之形成规模&#xff0c;同时展现巨大潜力。本次系统的是基于SSM框架的…

C语言:底层剖析——函数栈帧的创建和销毁

一、究竟什么是函数栈帧 C语言的使用是面向过程的&#xff0c; 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候一个一个依次调用就可以了。所以C语言的程序都是以函数作为基本单位的&#xff0c;如果能够深入理解…

全光谱护眼灯有哪些?寒假护眼台灯推荐

全光谱指的是包含了整个可见光谱范围以及部分红外和紫外光的光线。通常的白炽灯或荧光灯只能发出有限范围内的光波&#xff0c;而全光谱台灯通过使用多种类型的LED灯或荧光灯管来产生更广泛的光谱。这样的光谱更接近自然光&#xff0c;能够提供更真实的颜色还原和更好的照明效果…

【MFC】学生成绩管理系统(期末项目)

如果需要代码请评论区留言或私信 课程设计具体实现 数据库设计 E-R图 关系模式 教师(工号&#xff0c;姓名&#xff0c;学院) 主键(工号)学生(学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;班级&#xff0c;专业&#xff0c;学分) 主键(学号)课程(课程…

element-ui el-table表格勾选框条件禁用,及全勾选按钮禁用, 记录

项目场景&#xff1a; 表格的部分内容是可以被勾选的&#xff0c;部分内容是不可以被勾选的 使用的是 “element-plus”: “^2.2.22”, 以上应该都是兼容的 问题描述 要求el-table表格中&#xff0c;部分内容不可以被勾选&#xff0c;全选框在没有可选内容时&#xff0c;是禁…

【漏洞复现】Sentinel Dashboard SSRF漏洞(CVE-2021-44139)

Nx01 产品简介 Sentinel Dashboard是一个轻量级的开源控制台&#xff0c;提供机器发现以及健康情况管理、监控、规则管理和推送的功能。它还提供了详细的被保护资源的实际访问统计情况&#xff0c;以及为不同服务配置的限流规则。 Nx02 漏洞描述 CVE-2021-44139漏洞主要存在于…

一些面试会问到的奇怪问题与面试总结

1.v-for、v-if先后顺序。 官方不建议一起使用&#xff0c;但是有时候面试的时候会问到。 在vue2中是v-for先与v-if的。 源码js编译结果&#xff1a; _c()就是vm.$createElement()&#xff0c;意思是创建一个虚拟的element&#xff0c;就是返回值是VNode。 _l就是renderlist…

【项目经验】详解Puppeteer入门及案例

文章目录 一.项目需求及Puppeteer是什么&#xff1f;二.Puppeteer注意事项及常用的方法1.注意事项2.常用的方法*puppeteer.launch&#xff08;&#xff09;**browser.newPage()**page.goto()**page.on(request&#xff0c;&#xff08;&#xff09;> {}&#xff09;**page.e…

USB Redirector本地安装并结合内网穿透实现远程共享和访问USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

【dc-dc】世微AP5127平均电流型LED降压恒流驱动器 双色切换的LED灯驱动方案

这是一款双色切换的LED灯方案&#xff0c;12-50V 降压恒流,输出&#xff1a;6V 2.5A ​ 这是一款PWM工作模式 , 高效率、 外围简单、内置功率管&#xff0c;适用于 输入的 高 精度降压 LED 恒流驱动芯片。输出大功率可 达 25W&#xff0c;电流 2.5A。 可实现全亮/半亮功能切换…

上门按摩系统:科技与传统融合的新体验

在快节奏的现代生活中&#xff0c;人们越来越重视身心健康。传统的按摩方式虽然深受喜爱&#xff0c;却常因时间、地点的限制而无法满足需求。此时&#xff0c;上门按摩系统应运而生&#xff0c;将科技与传统的按摩技艺完美结合&#xff0c;为用户提供更便捷、个性化的服务。 上…

【Linux】自定义shell

👑作者主页:@安 度 因 🏠学习社区:安度因 📖专栏链接:Linux 文章目录 获取命令行前置字段命令行输入解析命令行普通指令的执行子进程执行命令指令类型判断 && 内建命令总结 &&a