最近在做中心内部信息化的一些工作,优先级比较高的就是解决单点登录问题。调研了几个单点登录方案后,选用CAS作为单点登录系统。为了方便后续搜索问题解决办法,随大流使用了5.3这个版本。

CAS Enterprise Single Sign-On

CAS 5.3官方文档 https://apereo.github.io/cas/5.3.x/

CAS 5.3环境搭建

按照官网强烈建议的WAR Overlay的方式安装,以便后续升级。使用这个模板apereo/cas-overlay-template创建一个5.3版本的项目。overlay的方式,大概意思就是把war包下要修改的文件按相同的路径复制出来作为源码,这样在编译后,自己复制出来修改的那些文件就会替换原有的文件。

修改日志路径

log4j2.xml复制到src/main/resources/下,修改baseDir的路径

<Property name="baseDir">/home/yangjl/github/cas-overlay-template/etc/cas/logs</Property>

支持http

修改 HTTPSandIMAPS-10000001.json

WEB-INF/classes/services/HTTPSandIMAPS-10000001.json 复制到 src/main/resources/services/HTTPSandIMAPS-10000001.json,在 serviceId 的内容里增加 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
}

修改 application.properties

application.properties 复制到src/main/resources

注释以下三行

#server.ssl.key-store=file:/etc/cas/thekeystore
#server.ssl.key-store-password=changeit
#server.ssl.key-password=changeit

增加下面两行

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

连接MySQL数据库

修改pom.xml,增加依赖

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-jdbc</artifactId>
    <version>${cas.version}</version>
</dependency>
<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-jdbc-drivers</artifactId>
    <version>${cas.version}</version>
</dependency>

上面的cas-server-support-jdbc-drivers包含了MySQL的驱动,不需要单独引入MySQL的依赖

注意:MySQL8 的驱动类为:com.mysql.cj.jdbc.Driver

在 配置文件增加以下配置

# 根据用户名查询密码
cas.authn.jdbc.query[0].sql=select username, password from user where username=?
# 密码的字段名
cas.authn.jdbc.query[0].fieldPassword=password
cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/cas
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=123456
cas.authn.jdbc.query[0].driverClass=com.mysql.cj.jdbc.Driver

把配置文件里的默认用户注释掉
#cas.authn.accept.users=casuser::Mellon

使用加密的用户密码

以下是使用MD5加密的配置,也可以指定自定义的实现类

# NONE|DEFAULT|STANDARD|BCRYPT|SCRYPT|PBKDF2
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

CAS-Client 接入CAS

Springboot-thymeleaf-shiro项目接入CAS

参考这个网友的项目 https://github.com/gkaigk1987/shiro-pac4j-cas-demo

The End.