参考java1234.com

一、 CAS介绍

  • 简介:CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。CAS 是 耶鲁大学(Yale University)发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。

  • 特点:
    1、开源的企业级单点登录解决方案。
    2、CAS Server 为需要独立部署的 Web 应用。
    3、CAS Client 支持非常多的客户端(这里指单点登录系统中的各个 Web 应用),包括 Java, .Net, PHP, Perl, Apache, uPortal, Ruby 等。
    4、CAS属于Apache 2.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]

二、搭建Tomcat HTTPS支持CAS采用HTTPS协议处理用户请求,所以我们需要配置Tomcat支持HTTPS协议;

第一步:生成秘钥库

我们采用JDK自带的keytool工具生成秘钥库

别名 java1234 存储路径 D:\cas\keystore

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

这里需要填写一些信息,注意填写要域名;
秘钥库密码我们用 666666
执行完,会生成一个秘钥库文件;

第二步:从秘钥库里导出证书

keytool -export -trustcacerts  -alias java1234 -file D:/cas/keystore/java1234.cer  -keystore D:/cas/keystore/java1234.keystore


输入第一步的秘钥库密码 666
即可生成证书;
![graphic](https://img-blog.csdnimg.cn/20210511114205593.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNDk3NjU4,size_16,color_FFFFFF,t_70
证书文件;

第三步:将证书导入到JDK证书库

keytool -import -trustcacerts -alias java1234 -file D:/cas/keystore/java1234.cer -keystore "E:/jdk1.8/jre/lib/security/cacerts"

密码: changeit

这里我们采用tomcat9

找到tomcat->conf->server.xml 打开文件

加下如下配置即可;

<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\java1234.keystore"# keystorePass="666666" />

启动bin下的startup.bat

(默认有中文乱码,可以我们来到tomcat目录的conf子目录中,找到一个名为 “logging.properties” 的文件,打开这个文本文件,找到如下配置项:
java.util.logging.ConsoleHandler.encoding = UTF-8
将 UTF-8 修改为 GBK,修改后的效果为:
java.util.logging.ConsoleHandler.encoding = GBK
保存后,重启tomcat!)

#第五步:测试

访问 https://localhost:8443

三、CAS Server服务端搭建

CAS Server war下载

官网:https://www.jasig.org/
github官网:https://github.com/apereo/cas

cas服务端

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

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

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

下载:cas-server-webapp-tomcat-5.3.14

CAS Server发布到Tomcat

把war包放tomcat下,启动tomcat会自动解压,我们把名称改成cas,方便访问;
注意点:日志修改
访问:https://localhost:8443/cas

cas 8443端口

配置hosts: C:\Windows\System32\drivers\etc

127.0.0.1 java1234.com

通过域名访问:

https://java1234.com:8443/cas
用户名:casuser

密码:Mellon

配置数据源,数据库用户认证

  • 第一步:新建数据和表:
CREATE DATABASE /*!32312 IF NOT EXISTS*/`db_sso` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `db_sso`;
/*Table structure for table `t_cas` */
DROP TABLE IF EXISTS `t_cas`;
CREATE TABLE `t_cas` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(30) DEFAULT NULL,`password` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;/*Data for the table `t_cas` */
insert  into `t_cas`(`id`,`username`,`password`) values (1,'java1234','123456');

第二步:修改application.properties配置文件
注释掉写死的认证用户
加上jdbc数据源配置

# cas.authn.accept.users=casuser::Mellon
# cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQL5Dialect
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/db_sso?serverTimezone=GMT
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=123456
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.jdbc.Driver

第三步:加上jdbc驱动包以及支持jar

密码加密校验

  • 第一步:数据库生成下md5密码
    SELECT MD5(‘123456’);

  • 第二步:修改application.properties配置文件
    cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
    cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
    #MD5加密策略
    cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

  • 第三步:测试OK

四、CAS Client+springboot客户端整合搭建


报错原因:cas服务器默认不支持http请求,我们可以通过配置来让其支持http请求:
D:\soft\apache-tomcat-9.0.38\webapps\cas\WEB-INF\classes\services
修改HTTPSandIMAPS-10000001.json;

解决办法:
1、修改配置文件HTTPSandIMAPS-10000001.json,加上http

2、修改配置文件\WEN-INF\class\application.properties,加上如下配置
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

springboot+cas单点登录相关推荐

  1. SpringBoot 简单实现仿CAS单点登录系统

    SpringBoot 简单实现仿CAS单点登录系统 新境界开源开源SSO项目介绍 新境界开源SSO项目实现原理大致如下: 新境界开源SSO项目登录流程介绍 新境界开源SSO项目授权登录流程介绍 新境界 ...

  2. CAS单点登录原理简单介绍

    1. SSO简介 1.1 单点登录定义 单点登录(Single sign on),英文名称缩写SSO,SSO的意思就是在多系统的环境中,登录单方系统,就可以在不用再次登录的情况下访问相关受信任的系统. ...

  3. CAS单点登录(http方式)

    CAS单点登录 1.CAS介绍 首先我们来说一下CAS,CAS全称为Central Authentication Service即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份 ...

  4. CAS单点登录框架使用

    CAS单点登录框架使用 CAS Server 1.GitHub上下载项目 https://github.com/apereo/cas-overlay-template/tree/5.3 5.3之后的都 ...

  5. CAS单点登录-配置中心(三)

    CAS单点登录-配置中心(三) 本章计划及内容 计划: 微服务概念 配置中心充当角色 搭建配置中心 cas连接配置中心 内容: 采用 spring cloud Dalston SR3搭建配置中心 采用 ...

  6. cas单点登录原理碎碎念

    2019独角兽企业重金招聘Python工程师标准>>> 也许有一天,你去面试,当面试官问你做cas的经验的时候,你会怎么描述? cas单点登录的原理? 单点登录是分为基于sessio ...

  7. CAS单点登录3--服务端登录页个性化

    原理 cas的页面显示控制是集中在\WEB-INF\cas.properties中的cas.viewResolver.basename属性的,其默认值为default_views 所以cas会去cla ...

  8. web工程中集成cas单点登录

    背景 cas的服务端已经搭建成功,现在需要在web项目中集成cas client.我们项目使用spring 1.在pom中配置 <!--cas单点登录 --><dependency& ...

  9. 终于把单点登录完整流程图画明白了!史上最完整的CAS单点登录完整图解!

    CAS单点登录 本人也是初次接触CAS,有问题还请指正. 什么是单点登录 比如说百度,在浏览器中登录百度贴吧之后,百度的其他网站也同步登录了:退出百度贴吧之后,百度的其他网站也同步退出了. 简单来说就 ...

最新文章

  1. 障碍期权定价 python_[宜配屋]听图阁
  2. .net thread操作串口_听说你不知道 RT-Thread 有个 ringbuffer
  3. GROMACS运行参数之em_real.mdp文件详解
  4. linux 子进程exit6,Linux内核之do_exit
  5. Caffe学习系列(14):初识数据可视化
  6. c语言while退出无限循环,请教:为什么我用while(!feof(fp))时会出现无限循环????...
  7. CentOS7中后台运行Node-RED(关闭窗口也能访问服务)
  8. ARM 之十四 ARMv9 架构前瞻
  9. qt实现窗口拖动的两种思路
  10. xlsx怎么设置行高列宽_7米面宽的3栋别墅,两款复式进深达到18米,第一款主体只要16万...
  11. opencv函数制作的秒针模型
  12. 5. PDO 数据库封装
  13. 计算机组成原理课后习题答案(第五版白中英)
  14. PHP如何应对高并发
  15. FileZilla Server超详细配置
  16. Ubuntu安装mysql-8.0.20-linux-glibc2.12-i686.tar.xz 步骤
  17. C语言开发windows桌面程序,演练:创建传统的 Windows 桌面应用程序 (c + +)
  18. 计算机网络实验:IP协议层分析
  19. 腾讯cdn设置 php,wordpress网站使用腾讯CDN的最佳缓存配置
  20. [IOS APP]毕淑敏经典有声小说

热门文章

  1. vi linux insert切换该行第一个字符,Linux之Vi命令讲解
  2. GPU与CPU比较,GPU为什么更适合深度学习?
  3. 各类工控软件图库(组态王,威纶通,西门子,昆仑通泰等通用
  4. 基于区块链溯源系统后端开发
  5. Android 同步网络时间
  6. 银行软件测试怎么做的
  7. 朱会灿:搜索引擎演变史【腾讯大讲堂第3期】
  8. python实现树结构并显示
  9. 【量化金融】收益率、对数收益率、年华收益、波动率、夏普比率、索提诺比率、阿尔法和贝塔、最大回撤
  10. Failed to configure a DataSource