CAS 使用MySql數據庫賬戶認證
一、前言
前幾節中我們部署了自己的Cas Server,知道了單點登錄的原理,學會了啓用https協議。然而,我們卻一直使用的是固定的賬號密碼(casuser/Mellon)進行登錄,而登錄界面上的警告也十分顯眼。使用固定的賬號密碼登錄終究不是長遠之計,Cas提供非常的認證策略,不僅支持JDBC認證、LDAP認證、Basic認證、Shiro認證、Pac4j認證、MongoDB認證、Rest認證、IP黑白名單等認證,還提供了豐富的第三方的認證策略和自定義認證策略。
二、整合JDBC認證
2.1 建庫建表並插入數據
在MySql數據庫中創建名爲cas的數據庫,創建cas_user表,語句如下:
--創建數據庫
CREATE DATABASE cas DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
USE cas;
--創建用戶信息表
DROP TABLE IF EXISTS `cas_user`;
CREATE TABLE `cas_user` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user_name` VARCHAR(50) DEFAULT NULL,
`user_password` VARCHAR(50) DEFAULT NULL,
`created_time` decimal(13,0) DEFAULT NULL COMMENT '創建時間',
`expired_flag` int(1) DEFAULT 0 COMMENT '是否過期',
`disabled_flag` int(1) DEFAULT 1 COMMENT '是否有效',
PRIMARY KEY (`id`)
);
--插入數據
INSERT INTO `cas_user` VALUES (NULL,'admin','123456',NULL,0,0),(NULL,'guest','123456',NULL,0,0);
2.2 添加依賴
在pom.xml中添加jdbc認證依賴和mysql數據庫驅動依賴,具體如下:
<!-- 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>8.0.11</version>
</dependency>
2.3 在application.properties中添加jdbc認證配置
首先將原來配置的靜態認證註釋掉,然後添加如下配置:
#jdbc驗證配置
#查詢賬號密碼sql,必須包含密碼字段
cas.authn.jdbc.query[0].sql=select * from cas_user where user_name=?
#指定上面的sql查詢字段名(必須)
cas.authn.jdbc.query[0].fieldPassword=user_password
#指定過期字段,1爲過期,若過期需要修改密碼
cas.authn.jdbc.query[0].fieldExpired=expired_flag
#不可用字段段,1爲不可用,
cas.authn.jdbc.query[0].fieldDisabled=disabled_flag
#數據庫方言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&serverTimezone=UTC
#數據庫用戶名
cas.authn.jdbc.query[0].user=root
#數據庫密碼
cas.authn.jdbc.query[0].password=123456
#默認加密策略,通過encodingAlgorithm來指定算法,默認NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=NONE
# 鹽值固定列
#cas.authn.jdbc.encode[0].saltFieldName=username
##靜態鹽值
##cas.authn.jdbc.encode[0].staticSalt=.
#cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
#cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
驅動、查詢數據庫等等需要根據不同的場景進行調整:
- 若密碼無加密,調整passwordEncoder.type=NONE
- 若密碼加密策略爲SHA,調整passwordEncoder.encodingAlgorithm=SHA
- 若算法爲自定義,實現org.springframework.security.crypto.password.PasswordEncoder接口,並且把類名配置在passwordEncoder.type
三、測試
在瀏覽器訪問https://localhost/cas/login,我們可以看到之前的警告沒有了。
我們使用數據庫配置的用戶名密碼登錄(admin 123456),可以正常登錄了。