SSO单点登录详解-------七、搭建CAS Server服务端

一、前言

什么是maven的overlay?

overlay可以把多个项目war合并成为一个项目,并且如果项目存在同名文件,那么主项目中的文件将覆盖掉其他项目的同名文件。

apereo提供了一个基于层结构的框架,可以帮助开发者快速引入cas server的代码,然后实现自由配置或代码覆盖,打包方式也非常简单。
Github地址:https://github.com/apereo/cas-overlay-template

二、快速构建

1.环境要求:JDB1.8+
2.下载或者克隆cas-overlay-template(version:5.2.3)项目到本地,用Intellji Idea/Eclipse打开项目,下载依赖时间较长,需耐心等待,建议注释pom文件中配置的repositories,使用国内的镜像.可以换成这个或者阿里云

 <repositories>
        <repository>
            <releases>
                <enabled>true</enabled>
            </releases>
            <id>maven2-release</id>
            <url>http://uk.maven.org/maven2/</url>
        </repository>
 </repositories>

3.有个依赖下载很慢或者下载不了cas-server-webapp-tomcat,建议直接下载之后放到本地仓库对应的目录会快点.进去之后选择5.2.3版本下载.
点击下载cas-server-webapp-tomcat

在这里插入图片描述
下载好之后把文件放入到本地仓库中,目录地址为:
$localRepository/org/apereo/cas/cas-server-webapp-tomcat/5.2.3
$localRepository:本地仓库路径

3.在项目中添加src/main/java和src/main/resources目录,并将src/main/java设置为代码文件根目录,将src/main/resources设置为资源文件根目录。
在这里插入图片描述
4.将overlays目录下的WEB-INF/classes/目录中的application.properties文件复制到src/main/resources中.相同的文件名,我们项目中的application.properties会把它WAR里面的application.properties覆盖掉.
在这里插入图片描述
5.将D:/keys/wolfcode.keystore拷贝到resources目录
在这里插入图片描述
6.修改application.properties文件,

  • server.ssl.key-store:密钥文件存放位置.classpath:表示在资源目下寻找
  • server.ssl.key-store-password:密钥库密码
  • server.ssl.key-password:密钥密码
  • server.ssl.key-alias:wolfcode 别名
    在这里插入图片描述

7.打开命令行,进入项目所在目录,运行内置的命令:build.cmd run ,执行时间较长,请耐心等待
在这里插入图片描述
8.如果出现如下界面说明CAS Server服务已经启动.
在这里插入图片描述
可能中途会出现如下警告,但并不影响运行.
CAS is configured to accept a static list of credentials for authentication. While this is generally useful for demo purposes, it is STRONGLY recommended that
这个只是警告,不是错误,意思是现在使用的是静态的验证,不够安全.
没关系,我们后续会换成数据库的验证.
在这里插入图片描述
9.在浏览器中输入https://www.sso.com:8443/cas/login,出现如下界面说明CAS Server服务搭建成功.

注意:www.sso.com是我们自己在host文件中配置的映射,映射到本机127.0.0.1.

默认登陆账号密码是 casuser:Mellon ,可以在application.properties中最后一行修改cas.authn.accept.users=casuser::Mellon
在这里插入图片描述

三、搭建JDBC的CAS服务端

1.准备工作

我们需要把用户存储到数据库中,脚本文件cas.sql在
https://github.com/javalanxiongwei/cas-overlay-template-master.
1.创建数据库cas,执行cas.sql文件,执行后拥有了用户表sys_user.
说明:

expired字段表示过期,1表示已过期,需要修改密码
disabled表示账号是否禁用,1表示禁用

在这里插入图片描述

sys_user表

数据表存放的数据如下图所示:

在这里插入图片描述

说明:
如果采用MD5加密,那password就是MD5加密后的密文,sha同样如此
admin、wolfcode、lanxw明文密码分别是admin、wolfcode、666

2.在POM文件中添加如下依赖:

<!--新增支持jdbc验证-->
<dependency>
        <groupId>org.apereo.cas</groupId>
        <artifactId>cas-server-support-jdbc</artifactId>
        <version>${cas.version}</version>
</dependency>
<!--使用mysql驱动-->
<dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.21</version>
</dependency>
2.配置

需要在配置中告诉框架要哪个数据库的哪个表查询数据,所以在application.properties新增如下配置.

#jdbc验证配置
#Query Database Authentication 数据库查询校验用户名开始
#查询账号密码sql,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from sys_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
#数据库方言hibernate的知识
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
#数据库驱动 
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
 #数据库连接 
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=UTF-8
 #数据库用户名 
cas.authn.jdbc.query[0].user=root
 #数据库密码
cas.authn.jdbc.query[0].password=admin
 #默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密 
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
#Query Database Authentication 数据库查询校验用户名结束 
#jdbc验证配置

以上配置,如驱动,查询数据库等等需要根据不同的场景进行调整:

  • 若密码无加密,调整passwordEncoder.type=NONE
  • 若密码加密策略为SHA,调整passwordEncoder.encodingAlgorithm=SHA
  • 若算法为自定义,实现org.springframework.security.crypto.password.PasswordEncoder接口,并且把类名配置在passwordEncoder.type
3.测试

在项目所在目录运行build.cmd run,在浏览器输入http://www.sso.com:8443/cas/login.

输入admin/admin

在这里插入图片描述

账号被禁用

输入wolfcode/wolfcode
在这里插入图片描述

账号过期

输入lanxw/666

在这里插入图片描述

正常登录

4.其他

我们已经把CAS Server端的验证变成使用JDBC的方式认证,而且在数据库中也已经对明文密码使用md5进行加密,但是只是用md5加密安全性不够高.所以一般我们会对密码使用md5+盐加密来增加密码管理的安全性.
我们需要修改application.properties,在配置文件中指定盐值和加密次数:
对应的sys_user_encode的脚本也是从上面的github地址获取.
测试过程和第四点是一致的.

#Encode Database Authentication 开始
#加密次数
cas.authn.jdbc.encode[0].numberOfIterations=2
#该列名的值可替代上面的值,但对密码加密时必须取该值进行处理(如果使用这个配置需要把上面的配置注释)
#cas.authn.jdbc.encode[0].numberOfIterationsFieldName=
# 盐值固定列
cas.authn.jdbc.encode[0].saltFieldName=username
#静态盐值(如果使用这个配置需要把上面的配置注释)
#cas.authn.jdbc.encode[0].staticSalt=.
cas.authn.jdbc.encode[0].sql=select * from sys_user_encode where username=?
#对处理盐值后的算法
cas.authn.jdbc.encode[0].algorithmName=MD5
cas.authn.jdbc.encode[0].passwordFieldName=password
cas.authn.jdbc.encode[0].expiredFieldName=expired
cas.authn.jdbc.encode[0].disabledFieldName=disabled
cas.authn.jdbc.encode[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=UTF-8
cas.authn.jdbc.encode[0].dialect=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.encode[0].user=root
cas.authn.jdbc.encode[0].password=admin
cas.authn.jdbc.encode[0].driverClass=com.mysql.jdbc.Driver
#Encode Database Authentication 结束



原文链接:
https://www.jianshu.com/p/2bd8f2b1db86
https://www.jianshu.com/p/1e46435ffafa

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值