CAS认证DB“编码”密码加密不能配合使用Spring Security的ShaPasswordEn

2019-09-26 03:35发布

我目前配置我的CAS服务器V5.0.2使用数据库验证,特别是使用的编码方法,使用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,我真正体会到了急需的帮助。 谢谢!

Answer 1:

我通过修改从CAS服务器-upport-JDBC的依赖(同CAS版本)QueryAndEncodeDatabaseAuthenticationHandler.java文件使用Spring Security的ShaPasswordEncoder而不是由CAS所使用的是阿帕奇四郎的默认哈希服务的解决了这个问题。 具体来说,我所做的就是添加修改后的Java文件(加上AbstractJdbcUsernamePasswordAuthenticationHandler.java)我正在使用src /主/ JAVA /组织/ apereo / CAS /适配器/ jdbc目录里面的CAS行家覆盖内。 我java文件中修改相关的功能被命名为digestEncodedPassword。 我注释掉的代码原线,并与我实现ShaPasswordEncoder替换它。 自定义源代码应该建立CAS时一起进行编译。



文章来源: CAS DB Authentication “encode” password encryption can't match with database password encrypted using Spring Security's ShaPasswordEncoder