关于如何在一台服务器上部署中央认证系统(CAS)的方法在之前的文章中已经介绍过了
服务器配置 属性配置 Service Management配置
*以下方法与配置依旧基于CAS5.0.x,不同版本可能配置方式与属性稍有差异
由于之前学校的新生数据同步较慢,需要一个学期左右的时间才能同步到CAS的数据库,所以这就造成了新生无法在入学之后及时使用社团所提供的部分服务和应用,例如使用edx进行在线学习等等。
因为之前社团部署的CAS使用的是gradle-overlay方式,所有的配置都是通过修改配置文件来完成的,为了避免直接修改线上稳定运行的CAS的配置文件,想到还有另一台服务器安装了新的测试版的CAS,所以决定让测试版的服务器连接自己建立的数据库,作为现行CAS的委托认证服务器对新生的账号进行认证。
具体参考了这篇 说明文档
首先需要添加依赖
vim {CASDownloadDir}/cas/build.gradle
添加
compile "org.apereo.cas:cas-server-support-pac4j-webflow:${project.'cas.version'}"
到 dependencies 中,重新打包之后,加入Tomcat中。
在
{CASDir}/WEB-INF/classes$ vim application.properties
加入如下配置:
cas.authn.pac4j.cas.loginUrl=https://yournewcasurl.com
cas.authn.pac4j.cas.protocol=CAS30
重启tomcat,刷新页面后会自动显示出一个额外的登录入口链接。点击该链接,原CAS系统将以一个service的身份向新CAS系统发起认证请求,所以新的CAS系统要允许原CAS的链接进行请求。登录成功后会自动返回原CAS的成功界面,这样一次委托登录就成功了。
另外,在配置的时候,
cas.authn.pac4j.cas.protocol
这一条属性并没有给出固定的属性值,一开始填了CAS3.0,在log中发现了报错,报错的指向为某个.jar文件的某个枚举中没有给出的属性值。
上网查找到这个.jar包,pac4j-cas-3.0.1-sources.jar,直接更改后缀名为.zip后解压,找到
/pac4j-cas-3.0.1-sources/org/pac4j/cas/config/CasProtocol.java 这个文件,会发现定义了一个枚举类,包括CAS10,CAS20,CAS20_PROXY,CAS30,CAS30_PROXY,SAML 几种类别,根据所需要的协议选择填写即可。
后记
1、说来惭愧,其实CAS是支持多数据源的验证的,只要多配置几个database就可以了,但是当时没有反应过来,直到写这篇文章总结的时候,重新看了一遍配置文件才发现。最简单的方法就是再配置一个数据源在同一个CAS上进行认证。
只需要再添加一次相应的属性配置,再将数组下标更改即可
cas.authn.jdbc.query[1].sql=
cas.authn.jdbc.query[1].healthQuery=
cas.authn.jdbc.query[1].url=
cas.authn.jdbc.query[1].failFastTimeout=1
cas.authn.jdbc.query[1].dialect=org.hibernate.dialect.MySQL5Dialect
cas.authn.jdbc.query[1].batchSize=1
cas.authn.jdbc.query[1].user=
cas.authn.jdbc.query[1].password=
cas.authn.jdbc.query[1].driverClass=com.mysql.jdbc.Driver
cas.authn.jdbc.query[1].idleTimeout=5000
cas.authn.jdbc.query[1].fieldPassword=
数据属性的配置同理。
但是需要注意的是,两个数据源的username不能相同,否则在获取用户属性的时候会发生混乱。
2、这个学期学校的效率出奇地高,导致新生信息在第二周的时候就已经同步完毕了。我也是看到后台日志才惊奇的发现。
3、没了,感谢阅读。