失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > CAS统一身份认证(四):集成MySQL用户验证

CAS统一身份认证(四):集成MySQL用户验证

时间:2023-12-07 16:47:43

相关推荐

CAS统一身份认证(四):集成MySQL用户验证

本文主要介绍CAS统一身份认证服务器JDBC密码管理,并以FreeBSD环境下的MySQL数据库为例实现CAS 6.6版的数据库用户验证。主要包括以下几个方面:

JDBC密码管理MySQL数据库准备用户验证属性配置文件配置MySQL数据库支持构建和测试CAS服务

本文使用的软件版本:

FreeBSD 13.0OpenJDK 11.0.2gradle 7.3.3MySQL 8.0

1 JDBC密码管理

CAS统一认证的用户名密码可存储于的数据库中,通过JDBC访问数据库,获取用户名和密码。同时还可以设置或者自定义密码的加密方法,以满足多标准化的密码加密需求。

通过CAS Overlay模板增加数据库支持非常简单,只需要准备好数据库,然后能过配置gradle任务就可以生成新的支持数据库密码存储的cas.war。

CAS统一身份认证(二):Overlay配置管理中介绍了使用Overlay模板进行配置管理过程,并对配置文件的覆盖策略作了说明。由于集成数据库支持需求导入数据库的JDBC驱动等库文件及相关属性配置,使用外部独立配置文件时需要自己去下载一系列相关的jar包,且不能自动应对CAS服务版本的升级,所以选用Overlay模板方式来集成JDBC数据库,通过gradle任务自动完成最终Web应用包的构建。

当然,在cas.war包构建完成后,在生产环境中依然可以使用CAS统一身份认证(三):外部独立配置节中介绍了外部文件独立配置方法来对CAS生产系统进行配置。

2 MySQL数据库准备

在开始构建数据库支持的CAS认证服务之前,首先要准备好数据库。

(1)用户账号表

CAS会从数据库中查询用户名、密码、电子邮件、电话号码4个字段,可以使用以下SQL语句创建。

create table cas_user (id int NOT NULL AUTO_INCREMENT,username varchar(255),password varchar(255),email varchar(255),phone varchar(255),PRIMARY KEY(id));

(2)安全问题表

当需要找回密码时,CAS会从数据库中查询用户名、密码问题和答案3个字段,可以使用以下SQL语句创建。

create table cas_password_question (id int NOT NULL AUTO_INCREMENT,userid varchar(255),question varchar(255),answer varchar(255),PRIMARY KEY (id));

如果使用项目自备的数据库的话,一定要包含这几个字段,否则就要使用上面的SQL语句创建对应的数据表以后才能使用。

最后别忘了在cas_user数据表添加至少一条用户记录,要不然登录时就没用户可用了。

3 集成数据库驱动

增加数据库支持功能需要使用Overlay模板方式重新构建cas.war。首先打开build.gradle文件,在dependencies段中添加JDBC和MySQL支持如下:

implementation "org.apereo.cas:cas-server-support-pm-jdbc:${project.'cas.version'}"implementation "org.apereo.cas:cas-server-support-jdbc-drivers:${project.'cas.version'}"implementation "mysql:mysql-connector-java:8.0.28"

添加依赖时可以同时指定了包的版本,当然也可以不用考虑依赖包的版本号,依赖管理插件会自动解决这些版本号。修改后的build.gradle文件片断如下,最后三行为增加的JDBC和MySQL依赖。

dependencies {/*** CAS dependencies and modules may be listed here.** There is no need to specify the version number for each dependency* since versions are all resolved and controlled by the dependency management* plugin via the CAS bom.**/implementation "org.apereo.cas:cas-server-support-jdbc:${project.'cas.version'}"implementation "org.apereo.cas:cas-server-support-jdbc-drivers:${project.'cas.version'}"implementation "mysql:mysql-connector-java"}

4 用户验证属性配置文件

进入overlay-template-master文件夹,在src/main/resources目录下创建application.properties文件,这个文件中的配置会覆盖预编译包中的application.properties文件中配置的属性。

这一步也可以先不着急配置,建议在cas.war包构建完成之后,使用CAS统一身份认证(三):外部独立配置节中介绍的外部文件独立配置方法,在生产环境的/etc/cas/config文件夹下创建一个application-standalone.properties文件,然后在这个文件中对CAS生产系统进行外部独立配置。这也是本文正在使用的外部文件独立配置方法。

5 去除静态用户验证验证

创建/etc/cas/config/application-standalone.properties文件,输入以下配置去除静态用户验证

### CAS Authentication Credentials#cas.authn.accept.enabled=false#cas.authn.accept.users=casuser::cas#cas.authn.accept.name=Static Credentials

6 配置MySQL数据库支持

在application-standalone.properties文件中继续输入以下配置,增加MySQL数据库支持。

cas.authn.jdbc.query[0].driver-class=com.mysql.cj.jdbc.Drivercas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8cas.authn.jdbc.query[0].user=rootcas.authn.jdbc.query[0].password=123456cas.authn.jdbc.query[0].sql=select * from cas.cas_user where username=?cas.authn.jdbc.query[0].field-password=passwordcas.authn.jdbc.query[0].password-encoder.encoding-algorithm=cas.authn.jdbc.query[0].password-encoder.type=NONE#cas.authn.jdbc.bind[0].principal-transformation.groovy.location=

其中的数据库名称、数据库用户名、数据库用户密码、用户信息SQL查询语句、密码字段名称、是否使用口令加密算法等可以根据自己的实际情况和需求来选择。

7 重新构建CAS应用包

使用以下命令重新构建CAS应用包

rm src/main/resources/application.properties./gradlew --info clean build

注意这里首先删除了编译目录中的application.properties配置文件,如果你更喜欢在构建时将配置文件包含进Web应用包的话,在这里就不用删除了。

使用gradlew脚本进行构建时,会自动下载缺失的依赖并导入到项目中,如下图所示就是对新添加的三个依赖进行自动下载和包含。

Cached resource /content/repositories/snapshots/org/apereo/cas/cas-server-support-jdbc-drivers/6.6.0-SNAPSHOT/cas-server-support-jdbc-drivers-6.6.0-0903.093135-114.jar is up-to-date (lastModified: Sat Sep 03 09:49:28 GMT ).Cached resource /content/repositories/snapshots/org/apereo/cas/cas-server-support-jdbc/6.6.0-SNAPSHOT/cas-server-support-jdbc-6.6.0-0903.093135-114.jar is up-to-date (lastModified: Sat Sep 03 09:49:26 GMT ).Downloading https://repo./maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar to /root/.gradle/.tmp/gradle_download759115775673948bin

构建完成后,即可在build/libs目录下生成cas.jar应用包。

8. 测试CAS服务

执行java -jar build/libs/cas.jar,启动CAS服务,运行结果如下:

打开浏览器,在地址栏中输入以下地址即可打开CAS登录页面

https://localhost:8443/cas/login

在登录页面中输入原来的静态用户和密码casuser:Mellon发现已经不能登录了,会出现“认证信息无效”的错误提示。输入存储在数据库中的用户名casuser:123456可以登录成功。

至此,集成MySQL的统一身份认证过程就成功实现了,可以在此基础上继续进行密码加密、用户信息修改,以及用户的锁定、失效、禁止登录等功能。

最后,别忘了使用https://localhost:8443/cas/logout进行注销。

如果觉得《CAS统一身份认证(四):集成MySQL用户验证》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。