CAS DB认证"编码"密码加密不能与使用Spring Security的ShaPasswordEncoder加密的数据库密码相匹配

时间:2017-02-06 05:16:40

标签: spring encryption spring-security passwords cas

我目前正在配置CAS Server v5.0.2以使用数据库身份验证,特别是使用Encode方法,使用CAS属性文件。以下是属性文件中的相关属性配置:

cas.authn.jdbc.encode[0].sql=SELECT * FROM public.vt_user WHERE email=?
cas.authn.jdbc.encode[0].driverClass=org.postgresql.Driver
cas.authn.jdbc.encode[0].url=jdbc:postgresql://localhost:5432/tracking
cas.authn.jdbc.encode[0].user=postgres
cas.authn.jdbc.encode[0].password=postgres
cas.authn.jdbc.encode[0].saltFieldName=salt
cas.authn.jdbc.encode[0].passwordFieldName=password
cas.authn.jdbc.encode[0].healthQuery=SELECT 1 FROM INFORMATION_SCHEMA.TABLES
cas.authn.jdbc.encode[0].numberOfIterations=1
cas.authn.jdbc.encode[0].numberOfIterationsFieldName=
cas.authn.jdbc.encode[0].staticSalt=
cas.authn.jdbc.encode[0].algorithmName=SHA-1
cas.authn.jdbc.encode[0].dialect=org.hibernate.dialect.PostgreSQLDialect

cas.authn.jdbc.encode[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.encode[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.encode[0].passwordEncoder.encodingAlgorithm=SHA-1

我连接的数据库是PostgreSQL数据库。密码以前使用Spring Security的3.2.5 ShaPasswordEncoder进行编码,默认强度为SHA-1加上盐值。我通过在CAS服务器的默认登录页面中输入有效凭据来测试CAS数据库身份验证配置,但身份验证始终失败并返回"无效凭据。"另外,我已经知道3.2.5 ShaPasswordEncoder已被弃用,但我不打算改变它的实现。日志显示可以从用户表中成功查询用户名,但表中的密码和输入不匹配。

目前我正在寻找解决此问题的方法。我对CAS仍然相对较新,我非常感谢你需要的帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

我通过从cas-server-upport-jdbc依赖项(相同CAS版本)修改QueryAndEncodeDatabaseAuthenticationHandler.java文件来解决此问题,以使用Spring Security的ShaPasswordEncoder而不是CAS使用的那个,这是Apache Shiro的默认哈希服务。 具体来说,我所做的是在我在src / main / java / org / apereo / cas / adapters / jdbc目录中使用的CAS maven overlay中添加修改后的java文件(加上AbstractJdbcUsernamePasswordAuthenticationHandler.java)。我在java文件中修改的相关函数名为digestEncodedPassword。我注释掉了原始代码行,并将其替换为我的ShaPasswordEncoder实现。在构建CAS时,应该编译自定义源代码。