单点登录系统CAS的委托(Delegation)认证配置

本文由@iflab-FZ贡献

关于如何在一台服务器上部署中央认证系统(CAS)的方法在之前的文章中已经介绍过了

*以下方法与配置依旧基于CAS5.0.x,不同版本可能配置方式与属性稍有差异

由于之前学校的新生数据同步较慢,需要一个学期左右的时间才能同步到CAS的数据库,所以这就造成了新生无法在入学之后及时使用部分服务和应用,例如使用edx进行在线学习等等。

因为之前部署的CAS使用的是gradle-overlay方式,所有的配置都是通过修改配置文件来完成的,为了避免直接修改线上稳定运行的CAS的配置文件,想到还有另一台服务器安装了新的测试版的CAS,所以决定让测试版的服务器连接自己建立的数据库,作为现行CAS的委托认证服务器对新生的账号进行认证。

具体参考了这篇 说明文档

首先需要添加依赖

添加

到  dependencies  中,重新打包之后,加入Tomcat中。

加入如下配置:

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 几种类别,根据所需要的协议选择填写即可。


后记

其实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不能相同,否则在获取用户属性的时候会发生混乱。

Posted in OpenET.

edustack

edustack webmaster

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.