CAS单点登录(二)——搭建基础服务

2023-05-16

前一篇文章中,我们对CAS及SSO(单点登录)有了大致的了解,今天我们开始讲解如何搭建一个简单的CAS服务认证中心,如果你对CAS中单点登录的概念忘记了,可以先去复习一下先前的文章——CAS单点登录(一)——初识SSO,再开始接下来的内容。

一、搭建CAS基础服务

1、准备

首先CAS官方文档地址:https://apereo.github.io/cas/5.3.x/index.html,在后面我们可能随时会用到。

然后我们从Geting Started开始,在文档里面告诉我们部署CAS,推荐我们使用WAR Overlay method的方法,利用覆盖机制来组合CAS原始工件和本地自定义方法来达到自定义CAS的要求。

It is recommended to build and deploy CAS locally using the WAR Overlay method. 
This approach does not require the adopter to explicitly download any version of CAS, 
but rather utilizes the overlay mechanism to combine CAS original artifacts and local 
customizations to further ease future upgrades and maintenance.

官方给了两种编译方式,一种是Maven、另一种是Gradle,这里使用Maven安装部署。

WAR Overlay method

具体的详情可以参考:https://apereo.github.io/cas/5.3.x/installation/Maven-Overlay-Installation.html

在开始之前,我们需要配置好电脑环境,笔者当前的环境为:

  • JDK 1.8
  • Maven 3.5.3
  • Tomcat 8.5(官方推荐Tomcat至少要8版本以上)

tomcat

2、下载代码打包

我们需要下载打包成WAR的代码架子,地址为: https://github.com/apereo/cas-overlay-template。

这里我们使用的CAS当前最新版本5.3.x,然后我们进入代码根目录下打开pom.xml文件,添加国内的maven镜像源地址,加快下载包的速度,因为CAS需要的包有点多,并且很大,如果为原来的地址,速度非常慢。

     <repositories>
        <repository>
            <id>sonatype-releases</id>
            <url>http://oss.sonatype.org/content/repositories/releases/</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
        <repository>
            <id>sonatype-snapshots</id>
            <url>https://oss.sonatype.org/content/repositories/snapshots/</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
            <releases>
                <enabled>false</enabled>
            </releases>
        </repository>
        <repository>
            <id>shibboleth-releases</id>
            <url>https://build.shibboleth.net/nexus/content/repositories/releases</url>
        </repository>

        <!--添加国内镜像源地址-->
        <repository>
            <id>maven-ali</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public//</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
                <updatePolicy>always</updatePolicy>
                <checksumPolicy>fail</checksumPolicy>
            </snapshots>
        </repository>
    </repositories>

更改pom.xml文件后,我们到项目的跟目录下,执行mvn clean package命令,接着就会去下载相应的jar包。

mvn clean package

当执行完毕后,我们便可在项目根目录下的target目录下发现生成的cas.war包。然后我们将其放入Tomcat目录下的webapps下面。接着在浏览器里访问http://localhost:8080/cas/login,可以发现CAS出现登录界面。

cas login

默认账号:casuser 默认密码:Mellon 目前的配置仅有这一个用户。输入用户名和密码,登录成功!

sucess

这样我们就完成了CAS的登录过程,基本的CAS服务搭建就实现了。

我们在登录界面可以发现,弹出了两个提示框,如下图红框所圈:

tip

我们仔细阅读可以发现,这里主要说了:

一、我们的登录不是安全的,并没有使用HTTPS协议,这里我们使用了HTTP。

二、提示我们这里用户验证方式是静态文件写死的,指定就是我们的用户名和密码(casuser/Mellon),这个只适合demo使用。

接下来我们就主要围绕这两点来解决问题。

二、配置证书

1、生成证书

接下来我们便开始解决这两个问题,首先是HTTPS,我们知道使用HTTPS是需要证书的,所以接下来我们便制作一个证书。

使用JDK自带的工具keytool

keytool -genkey -alias caskeystore -keypass 123456 -keyalg RSA -keystore thekeystore

首先输入密钥库口令,然后在输入名字与姓氏时为为具体路由地址,就是待会CAS认证服务器的地址(这里以sso.anumbrella.net为例),而其余的根据具体情况填写即可,然后就会在当前目录下生成证书。

keystore

2、导出数字证书

keytool -export -alias caskeystore -keystore thekeystore -rfc -file cas.crt

输入先前的密钥库口令,然后在当前目录下生成具体的cas.crt数字证书。

export

3、将数字证书导入jdk下的jre里

windows:

keytool -import -alias caskeystore -keystore %JAVA_HOME%\jre\lib\security\cacerts -file cas.crt -trustcacerts -storepass changeit

Unix:

sudo keytool -import -alias caskeystore -keystore $JAVA_HOME/jre/lib/security/cacerts -file cas.crt -trustcacerts -storepass changeit

这里导入JDK时需要默认密码changeit,在命令中已经配置好了。如果没有该密码,则会报java.io.IOException: Keystore was tampered with, or password was incorrect错误。

import

4、配置DNS

这里我的CAS服务端是部署在本地的,所以需要做一个本地映射。

我的系统为Mac OS, 所以用管理员权限打开/private/etc/hosts文件

sudo vim /private/etc/hosts

添加映射地址:

127.0.0.1       sso.anumbrella.net

如果是Windows,则用管理员身份修改C:\Windows\System32\drivers\etc\hosts文件。

5、配置Tomcat

编辑Tomcat目录Conf下的server.xml文件。

将8443的端口配置文件打开,配置如下(添加前面刚刚生成的keystore的地址和密匙):

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
               maxThreads="150" SSLEnabled="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="/Users/anumbrella/keystore/thekeystore"
                         type="RSA" certificateKeystoreType="JKS" certificateKeystorePassword="123456"/>
        </SSLHostConfig>
    </Connector>

重启Tomcat服务器,接着我们访问https://sso.anumbrella.net:8443/cas/login,可以发现先前的情况一的提示没有了。

tip1

三、 更改配置

我们知道cas-overlay-template是采用配置覆盖的策略来进行自定义的,因此我们可以通过覆盖或者继承某些类重写某些方法实现自定义的需求。将我们先前的cas.war解压,或者直接去Tomcat下webapps目录下面,打开WEB-INF目录下的classes里面的application.properties文件。

application.properties

可以看到该文件就是对CAS认证服务器的配置,我们现在要自定义,打开我们的项目,新建src/main/resources文件夹,同时将刚才的application.properties文件复制到该目录下。

resources

现在我们就可以通过配置application.properties文件来实现对CAS服务器的自定义。

除了上面我们刚刚在Tomcat里面配置证书,我们还可以直接将证书配置到CAS服务信息里面,打开application.properties文件,我们可以发现在开头有配置信息如下:

SSL配置

我们将信息更改如下:

#SSL配置
server.ssl.enabled=true
server.ssl.key-store=file:/etc/cas/thekeystore
server.ssl.key-store-password=123456
server.ssl.key-password=changeit
server.ssl.keyAlias=caskeystore

然后将刚才上面生成的thekeystore放入到电脑目录/etc/cas/目录下面(这里你需要指定为自己具体的目录)。

现在我们启动项目就可以直接使用/etc/cas/下面的证书了。

除此之外,我们还可以将证书放在resources包下面,每次打包就可以直接使用该证书了。

server.ssl.key-store=classpath:thekeystore

注意:server.ssl.keyAlias是生成证书填写的别名,不是随便填写的,可以通过keytool -list -keystore thekeystore命令查看。

keyAlias

这里配置使用的是CAS自带的Tomcat,所以我们需要通过命令启动(与前面使用电脑自带Tomcat不同)。

Windows:

运行命令:

build.cmd run

打包命令:

build.cmd package

Unix:

运行命令:

build.sh run

打包命令:

build.sh package

当然你还可以使用java -jar cas.war 直接运行已经打包好的cas.war来运行CAS。

cas

接着我们在配置文件的最后我们发现了CAS的认证配置,这里就是CAS默认用户名和密码配置的地方,我们现在对其进行更改。

user config

默认的认证方式为静态文件认证,现在我们更改为JDBC认证方式,同时添加相关数据库驱动。

    <dependencies>
        <!--新增支持jdbc验证-->
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-jdbc</artifactId>
            <version>${cas.version}</version>
        </dependency>

        <!--若不想找驱动可以直接写下面的依赖即可,其中包括HSQLDB、Oracle、MYSQL、PostgreSQL、MariaDB、Microsoft SQL Server-->
        <dependency>
            <groupId>org.apereo.cas</groupId>
            <artifactId>cas-server-support-jdbc-drivers</artifactId>
            <version>${cas.version}</version>
        </dependency>

    </dependencies>

笔者这里直接使用了CAS提供的综合驱动库,这里不推荐这个用法,具体使用什么数据库引入具体的相关驱动即可,因为引入综合包,同时也引入了太多不必要的包。

现在我们更改application.properties配置,同时注释静态用户配置,具体更改如下:

##
# CAS Authentication Credentials
#
#cas.authn.accept.users=casuser::Mellon

#查询账号密码SQL,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from user where username=?

#指定上面的SQL查询字段名(必须)
cas.authn.jdbc.query[0].fieldPassword=password

#指定过期字段,1为过期,若过期不可用
cas.authn.jdbc.query[0].fieldExpired=expired

#为不可用字段段,1为不可用,需要修改密码
cas.authn.jdbc.query[0].fieldDisabled=disabled

#数据库连接
cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&useSSL=false

#数据库dialect配置
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect

#数据库用户名
cas.authn.jdbc.query[0].user=root

#数据库用户密码
cas.authn.jdbc.query[0].password=123

#数据库事务自动提交
cas.authn.jdbc.query[0].autocommit=false

#数据库驱动
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

#超时配置
cas.authn.jdbc.query[0].idleTimeout=5000

#默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=NONE
#cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
#cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

因为这里使用到了数据库,所以我在本地新建了一个数据库cas,然后新建用户表user,添加id、username、password、expired、disabled字段,同时添加用户名和密码,并给expired,disabled字段赋值为0。重新执行打包命令,mvn clean package,替换掉Tomcat下webapps下的cas.war包,并删除cas目录,重启Tomcat。

user

访问https://sso.anumbrella.net:8443/cas/login,我们可以发现,情况二的提示也没有出现了,因为我们的认证方式更改了。

接着我们输入anumbrella/anumbrella,就是刚才创建的用户名和密码,结果成功登陆。

cas login2

success2

到此,CAS基础服务搭建就介绍完毕了。如果有疑问,欢迎留言!!

代码实例:Chapter1

参考

  • CAS单点登录-自定义认证之JDBC(五)
  • CAS之5.2x版本单点登录服务安装
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAS单点登录(二)——搭建基础服务 的相关文章

随机推荐

  • 树莓派3B+ 人脸识别(OpenCV)

    树莓派3B 43 人脸识别 OpenCV 相信大家都看了前面的OpenCV安装和人脸检测教程 xff0c 已经跃跃欲试 xff0c 想要进行人脸识别了 xff0c 现在我们正式进入重头戏 人脸识别 的教程 注意 xff1a 该教程面向pyt
  • Window 设置远程桌面(兼容各平台)

    Window 设置远程桌面 xff08 兼容各平台 xff09 对于window远程桌面 xff0c 相信大家都不陌生 xff0c 它是一个非常好用的且稳定的工具 xff0c 远比第三方提供工具好用 但是 xff0c 有很多朋友在开启远程桌
  • 树莓派3B+ 远程下载服务器(Aria2)

    树莓派3B 43 远程下载服务器 xff08 Aria2 xff09 近来发现之前的部署的迅雷远程下载Xware在下载BT文件时会自动掉线 xff0c 鉴于迅雷不在对该固件的维护 xff0c 所以只能另辟蹊径 xff0c 现在比较主流的下载
  • 物理机下安装 VMware ESXi 6.7

    物理机下安装 VMware ESXi 6 7 ESXI虚拟平台是VMware出品的一个强大平台 xff0c 它可以直接安装在物理机上 xff0c 从而充分利用物理奖性能 xff0c 虚拟多个系统出来 ESXI是一个带WEB管理后台的软件 x
  • VMware ESXi 6.7 安装LEDE

    VMware ESXi 6 7 安装LEDE LEDE是Linux嵌入式开发环境项目 xff0c 在众多路由器固件中 xff0c LEDE可玩性最高的 xff0c 但要真的玩得转 xff0c 还是要一定的耐心 很多小伙伴一般都喜欢 爱快做主
  • vncserver 看不到桌面解决办法

    转载 xff1a http www th7 cn system lin 201308 43197 shtml ubuntu13 04安装vncserver后只显示桌面 不显示菜单栏解决 0 背景介绍 xff1a 一般的server操作系统是
  • Mininet教程(七)Mininet Walkthrough

    文章目录 Mininet教程 xff08 七 xff09 Mininet Walkthrough日常使用指令显示mininet开启选项开启Wireshark主机与路由器之间交互测试主机之间连通性运行一个简单的web服务器和客户端清理缓存 高
  • html的基本知识

    1 常用HTML标签 其他 br标签 xff1a 强制换行 lt br gt lt br gt 应用场景 用于强行换行 gt 不参与分类 xff0c 不能设置其他样式 1 xff09 行级标记 文本格式化标签 span标签 无语义标签 xf
  • 用VC++ 6.0 写贪吃蛇界面

    贪吃蛇界面 第一次写博客 xff0c 有点小紧张 xff0c 也有点激动 不多说了emmmm xff0c 自己跟着网上的视频 xff0c 用C语言做了一个贪吃蛇程序 xff0c 为了学年设计 欢迎界面的部分编译 emmmm xff0c 因为
  • 一、固定定位

    元素的位置相对于浏览器窗口是固定位置 即使窗口是滚动的它也不会移动 xff1a 特性 特性 xff1a 1 元素脱离正常文档流 xff0c 不占位 也脱离文本流 xff0c 全脱 2 始终相对于浏览器窗口四个角为原点进行固定定位的 3 不会
  • 定位元素的层级顺序

    层级 语法 z index n 标签添加定位之后 xff0c 可以覆盖在页面的其他标签上 后面加载的定位元素默认会覆盖在先加载的定位元素上 z index属性 xff1a 设置定位元素的叠放次序 特性 xff1a 1 z index的属性值
  • CSS 透明

    透明度属性 1 rgba r g b a 颜色模式 兼容性 xff1a IE6 7 8下不兼容 xff0c IE9 43 支持 使用 xff1a background color属性 color属性 border color属性等中设置透明
  • 数据类型和流程控制语句

    1 回顾 操作标签内容 闭合标签 标签 innerHTML 标签 innerText 标签 innerHTML 61 值 标签 innerText 61 值 表单标签 标签 value 标签 value 61 值 操作标签属性 标签 属性名
  • day02 JS交互

    1 回顾 基于对象和事件驱动的解释性脚本语言 js的组成 ECMAscript js的标准和核心 DOM 文档对象模型 BOM 浏览器对象模型 js的特性 基于对象 事件驱动 解释性 跨平台 js的引入方式 行间引入 在开始标签上加js 结
  • 一. js逻辑

    1 回顾 js的数据类型 5种基本的数据类型 number 数值 string 字符串 boolean 布尔 undefined 未定义 null 空对象 一种特殊的数据类型 复合 引用 对象 object 对象 array 数组 func
  • Git版本控制工具之Windows系统安装

    1 xff1a Git安装 Windows版本Git下载 a xff1a 地址 https git scm com download win 注意 xff1a 我们上面下载的是2 19 0的windows 64位的版本 进行安装如下 a x
  • Keil5:Error: Flash Download failed - Target DLL has been cancelled

    解决方案 xff1a reset复位Download的节点设备
  • Keil报错:Undefined symbol GPIO_Init

    原因是所需要的C文件没有在工程里面 即使在stm32f10x conf h中开启了包含相关头文件 仍然会出现这样的错误
  • KEIL中SW Device没有识别芯片,jlink下载不进去的问题

    参考了以下链接之后 xff0c 未解决 避坑指南 GD32 KEIL中SW Device没有识别芯片 xff0c jlink下载不进去的问题 无风灬幡动的博客 CSDN博客 jlink识别不到芯片 https blog csdn net q
  • CAS单点登录(二)——搭建基础服务

    前一篇文章中 xff0c 我们对CAS及SSO xff08 单点登录 xff09 有了大致的了解 xff0c 今天我们开始讲解如何搭建一个简单的CAS服务认证中心 xff0c 如果你对CAS中单点登录的概念忘记了 xff0c 可以先去复习一