win部署CAS服务并使用

news/2024/7/24 10:15:55 标签: java, 开发语言

前提描述:通过本次了解cas是个什么东西,并使用它。

cas为oss(单点登录)的一种实现方案。要实现cas单点登录,首先需要部署cas的server服务。

CAS是Central Authentication Service的缩写,中央认证服务,。

一、安装CAS服务端

CAS下载安装

cas-server-webapp-tomcat是cas的一个demo,github下载地址:https://repo1.maven.org/maven2/org/apereo/cas/cas-server-webapp-tomcat/5.3.14/

 生成秘钥库

1.采用JDK自带的keytool工具生成秘钥库,别名casbm,生成的秘钥存储路径为D:\cas\keystore
2.打开cmd窗口执行以下命令,命令如下:

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

秘钥口令随便输入,我这里输入123456,后面要用到

其他随便输入

最后确认输入y

 3.查看是否生成秘钥:casbm.keystore

 4.将秘钥导出为证书

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

输入密码:为上面设置的 123456

 5.将证书导入到JDK证书库

keytool -import -trustcacerts -alias casbm -file D:/cas/keystore/casbm.cer -keystore "D:/software/jdk1.8.0_162/jre/lib/security/cacerts"  

①后面D:/software/jdk1.8.0_162/jre/lib/security/cacerts"本机jdk的证书保存路径

②设置的密码是固定的: changeit

③是否信任此证书,我们输入:y

 下载tomcat,并配置支持https

下载:官网下载

由于cas需要https协议访问,所以我们要配置tomcat也支持https协议,我们找到我们的tomcat的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\casbm.keystore" keystorePass="123456"/>

 将下载的CAS包放入tomcat中启动

 1.我们将之前下载的cas包放入tomcat中启动,首先将war包放入tomcat的webapps下

为方便看,将名称 cas-server-webapp-tomcat-5.3.14.war 改为 cas.war

 启动tomcat

找到tomcat中bin下的startup.bat文件双击启动。

访问cas页面看是都成功运行

1.访问地址:https://localhost:8443/cas  ,用户名为:casuser 密码为:Mellon

 2.用户名密码是在如下配置文件中指定的

D:\software\tomcat\apache-tomcat-8.5.68\webapps\cas\WEB-INF\classes\application.properties

3.配置用户名密码为数据库中的真实用户名密码

上面我们的用户名密码是写死的,但是实际开发中我们的用户名密码是存储在数据库中的,这个时候需要我们从数据库中读取,我们打开application.properties文件,添加如下配置

①修改配置

cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?serverTimezone=GMT

cas.authn.jdbc.query[0].user=root

cas.authn.jdbc.query[0].password=root

cas.authn.jdbc.query[0].sql=select * from user where username = ?

cas.authn.jdbc.query[0].fieldPassword=password

cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

②将所需要的驱动jar包放入cas项目中

将所需要的jar包放入cas项目的lib中,jar包名称如下,可以去maven仓库中搜索

cas-server-support-jdbc-5.3.1.jar

cas-server-support-jdbc-drivers-5.3.1.jar

cas-server-support-jdbc-authentication-5.3.1.jar

connector-java-5.1.34_1.jar


③重启toncat,使用数据库中的用户名密码登录

④设置密码加密

可以使用数据库的用户名密码来登录cas了,但是明文的密码并不安全,现在我们需要配置一下加密。还是找到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

测试:将123456加密,然后将密码改为加密后的,此时重启tomcat再用123456登录

 4.配置CAS日志地址

 D:\software\tomcat\apache-tomcat-8.5.68\webapps\cas\WEB-INF\classes\log4j2.xml

二、springboot中集成cas客户端使用

1.创建2个springboot项目

创建过程略。。。

导包

<dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-autoconfigure</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.jasig.cas.client</groupId>
      <artifactId>cas-client-support-springboot</artifactId>
      <version>${cas.client.version}</version>
    </dependency>
  </dependencies>

2.配置application.yml

server:
  port: 8881
spring:
  application:
    name: study-cas-demo1
cas:
  serverUrlPrefix: https://localhost:8443/cas
  serverLoginUrl: ${cas.server-url-prefix}/login
  clientHostUrl:  http://localhost:${server.port}

server:
  port: 8882
spring:
  application:
    name: study-cas-demo2
cas:
  serverUrlPrefix: https://localhost:8443/cas
  serverLoginUrl: ${cas.server-url-prefix}/login
  clientHostUrl:  http://localhost:${server.port}

3.访问

cas-client1和cas-client2,访问http://localhost:8881,会跳转cas登录,然后在访问http://localhost:8882,会发现已经认证通过,不会跳转cas登录,达到了单点登录的效果。

4.问题1:未认证授权的服务

 解决办法:

 ①. 修改http支持的配置
打开文件:cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|imaps)://.*",
  "name" : "HTTPS and IMAPS",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

第三行,添加http请求支持

{
  "@class" : "org.apereo.cas.services.RegexRegisteredService",
  "serviceId" : "^(https|imaps|http)://.*",
  "name" : "HTTPS and IMAPS",
  "id" : 10000001,
  "description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
  "evaluationOrder" : 10000
}

②启用记载JSON配置文件
打开文件cas\WEB-INF\classes\application.properties
增加如下配置

cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true

详细代码待补充

三、CAS单点登录流程讲解

单点登录(Single Sign On):简称 SSO,常用于多个系统中,用户只需登录一次,就可以访问其他信任的系统。比如,员工登录过OA系统后,可以直接访问邮件系统,而不再需要登录邮件系统。这里的OA系统和邮件系统,可以认为是相互信任的子系统,他们共用一套用户数据,这套用户数据的权限认证由统一的认证服务器来认证。

CAS协议:比较流行的单点登录解决方案。

CAS提供了CAS协议来完成单点登录,主要流程如下:

  1. 用户第一次向浏览器访问应用1(https://app.example.com),应用1判断用户没有登录,重定向到CAS server(https://cas.example.com/cas/login?service=https://app.example.com)

  2. CAS server中判断当前用户的sso的session不存在,展示用户名密码输入框

  3. 用户输入用户名密码向CAS server登录,验证通过后,CAS server 生成sso的session,向浏览器设置cookie,CASTGC=TGT-...
    其中cookie的值就是sso中session的key。同时CAS server会对应用1生成一个ticket,再去重定向到应用1中,应用1拿到这个ticket再次请求CAS server获取授权数据。成功后,设置cookie,jessionid=...。到此,应用1第一次认证结束。

  4. 当应用1第二次认证的时候直接校验jessionid是否合法即可。

  5. 当应用2第一次访问的时候,同样会重定向到CAS server中去,只不过,此时,由于,应用1已经认证通过了,同时sso的session已经保存了,所以,CAS server不会再去要求用户登录,而是直接对应用2生成一个ticket,后面的逻辑就和前面一样了。


http://www.niftyadmin.cn/n/310747.html

相关文章

【头歌】数组-稀疏矩阵的转置

数组-稀疏矩阵的转置 第1关&#xff1a;一般转置算法 任务描述 本关任务&#xff1a;实现稀疏矩阵的转置操作&#xff08;采用一般转置算法&#xff0c;即按列序转置&#xff09;。 相关知识 为了完成本关任务&#xff0c;你需要理解&#xff1a;1. 矩阵的压缩存储&#x…

Redis命令详解

Redis是一个高性能的内存键值数据库&#xff0c;它支持多种数据结构&#xff0c;包括字符串、哈希、列表、集合、有序集合等。Redis通过提供一组命令来实现对数据的操作&#xff0c;这些命令可以通过Redis客户端发送给Redis服务器&#xff0c;从而对数据库进行操作。 Redis的一…

Java 责任链模式详解

责任链模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为型设计模式&#xff0c;它用于将请求的发送者和接收者解耦&#xff0c;使得多个对象都有机会处理这个请求。在责任链模式中&#xff0c;有一个请求处理链条&#xff0c;每个处理请求的对象都是一个…

jmeter如何测试一个get请求

目录 1.配置测试计划1.1.创建线程组1.2.创建GET的HTTP请求取样器&#xff08;模拟GET请求&#xff09;1.3.添加查看结果树和聚合报告 2.执行压测并查看结果2.1.验证接口2.2.执行压力测试 使用jmeter测试一个http的get请求示例. 1.配置测试计划 1.1.创建线程组 打开jmeter - 测…

前端小记——Vue3

目录 Vue介绍 Vue安装使用 Vue入门案列 插值表达式 Vue指令 v-test v-html v-bind v-on v-model v-cloak v-show v-if v-else v-else-if v-for 计算属性 计算属性完整写法 属性侦听 class属性的绑定 style属性的绑定 表单数据收集 事件绑定和修饰符 Vue…

什么是土壤水势传感器

水对任何植物的重要性不言而喻。在不同生理时期&#xff0c;水分的作用并不相同&#xff0c;每个阶段如何控制水分都会影响植物的生长发育和产量。根系具有向水向肥性&#xff0c;知道不同深度的水势&#xff0c;那么我们就可以使用特殊的灌溉策略来刺激根系向更深处发展。比如…

07 - 3系统容量规划

阿里系业务容量规划 Tair集群部署与水位调配 阿里系容量精调之单机压测场景 传统模拟请求 流量复制 流量转发 网关权重 线上测试注意点 阿里系混合部署技术 资源分时复用&#xff1a;提高资源利用率sigama框架做在线资源池调度&#xff0c;伏羲做离线资源池调度&#xff1b;…

什么是应用交付网络(ADN)

从CDN到ADN CDN&#xff08;内容分发网络&#xff09;在90年代末受到麻省理工学院的启发并完成发明&#xff0c;00年代初成立第一家成功的CDN商业企业Akamai。CDN的目标是相对于最终用户在空间上分配服务&#xff0c;以提供高可用性和高性能。随着互联网的发展&#xff0c;CDN…