【发布时间】:2016-11-09 18:50:12
【问题描述】:
我已经在 spring security 中实现了一个 Digest 身份验证,它工作正常,直到我将它设置为使用 BCrypt 加密。
@Bean
public DigestAuthenticationEntryPoint digestEntryPoint() {
DigestAuthenticationEntryPoint digestAuthenticationEntryPoint = new DigestAuthenticationEntryPoint();
digestAuthenticationEntryPoint.setKey("myKey");
digestAuthenticationEntryPoint.setRealmName("Digest Realm");
return digestAuthenticationEntryPoint;
}
@Bean
public DigestAuthenticationFilter digestAuthenticationFilter(
DigestAuthenticationEntryPoint digestAuthenticationEntryPoint) {
DigestAuthenticationFilter digestAuthenticationFilter = new DigestAuthenticationFilter();
digestAuthenticationFilter.setAuthenticationEntryPoint(digestEntryPoint());
// digestAuthenticationFilter.setPasswordAlreadyEncoded(true);
digestAuthenticationFilter.setUserDetailsService(userDetailsServiceBean());
return digestAuthenticationFilter;
}
这些是我设置为启用摘要并与它们一起使用的 bean:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.exceptionHandling()
.authenticationEntryPoint(digestEntryPoint())
.and()
.addFilter(digestAuthenticationFilter(digestEntryPoint()))
//.httpBasic()
//.and()
.antMatcher("/**")
.csrf()
.disable()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.permitAll()
.and()
.logout()
.deleteCookies("remove")
.invalidateHttpSession(true)
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
.logoutSuccessUrl("/login")
.permitAll();
}
问题是服务器端生成的MD5响应和我自己的响应不匹配。 在 DigestAuthenticationFilter.java 中
if (!serverDigestMd5.equals(digestAuth.getResponse())) {
if (logger.isDebugEnabled()) {
logger.debug("Expected response: '" + serverDigestMd5
+ "' but received: '" + digestAuth.getResponse()
+ "'; is AuthenticationDao returning clear text passwords?");
}
fail(request,
response,
new BadCredentialsException(messages.getMessage(
"DigestAuthenticationFilter.incorrectResponse",
"Incorrect response")));
return;
}
服务器“serverDigestMd5”使用散列密码创建 md5digest,但在客户端(使用邮递员)我使用无盐密码,这就是生成响应的方式。如果我在客户端使用加盐密码,它可以工作,但这不是很可选。 有没有办法让它在不使用客户端加盐密码的情况下工作?
【问题讨论】:
-
如果我没记错的话,Http Digest 身份验证始终基于 MD5。所以不知道你将如何切换它。
标签: spring spring-security spring-boot spring-data-rest