使用JavaConfig示例验证Spring安全摘要

使用JavaConfig示例验证Spring安全摘要,java,spring,spring-security,digest-authentication,spring-java-config,Java,Spring,Spring Security,Digest Authentication,Spring Java Config,如何专门使用javaconfig(无XML)为摘要身份验证配置Spring4.0和SpringSecurity(3.2.0)?我使用的是下面的配置类,但是所有请求都被HTTP 401拒绝,并且“Nonce应该产生两个令牌,但是was(…消息就停在那里)” 我正试图通过包含标题在客户端进行授权: 授权:Digest username=“user”,realm=“myrealm”,nonce=“/service?param=98”,response=“fcd46faf42a583499d44e7f0

如何专门使用javaconfig(无XML)为摘要身份验证配置Spring4.0和SpringSecurity(3.2.0)?我使用的是下面的配置类,但是所有请求都被HTTP 401拒绝,并且“Nonce应该产生两个令牌,但是was(…消息就停在那里)”

我正试图通过包含标题在客户端进行授权:

授权:Digest username=“user”,realm=“myrealm”,nonce=“/service?param=98”,response=“fcd46faf42a583499d44e7f03711171ef2”,不透明=“”

如果我将该类还原为基于HttpBasic的配置,我就能够访问预期的服务。我的配置或请求有问题吗?上面的大部分代码都是从另一篇文章中借来的,但是我无法在这种情况下工作。所有这些都在Spring Boot 0.5.0M7中运行


谢谢。

请求似乎不完整。noonce参数应根据引用包含base64编码值

摘要身份验证的核心是“nonce”。这是服务器生成的值。Spring Security的nonce采用以下格式:

两者都描述了一个流程,在该流程中发出请求,如果没有从服务器获取nonce,服务器将提供此头

WWW-Authenticate:Digest-realm=“realm”,nonce=“IVjZjc3Yg==”,qop=“auth”

在401响应中,对客户端说“嘿,你是谁”。使用nonce和其他方法创建md5哈希并发送到服务器。服务器现在很高兴并处理请求。看看你在步骤1中做的好的一面,检查链接以获得更好的解释

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class SecurityConfigurationDigest extends WebSecurityConfigurerAdapter
{
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception
{
    auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
}

@Override
protected void configure(HttpSecurity http) throws Exception
{
    http.authorizeRequests().antMatchers("/**").authenticated().and().addFilter(digestAuthenticationFilter(digestEntryPoint()));
}

@Override
@Bean
public UserDetailsService userDetailsServiceBean() throws Exception
{
    return super.userDetailsServiceBean();
}

public DigestAuthenticationFilter digestAuthenticationFilter(DigestAuthenticationEntryPoint digestAuthenticationEntryPoint) throws Exception
{
    DigestAuthenticationFilter digestAuthenticationFilter = new DigestAuthenticationFilter();
    digestAuthenticationFilter.setAuthenticationEntryPoint(digestEntryPoint());
    digestAuthenticationFilter.setUserDetailsService(userDetailsServiceBean());
    return digestAuthenticationFilter;
}

@Bean
public DigestAuthenticationEntryPoint digestEntryPoint()
{
    DigestAuthenticationEntryPoint digestAuthenticationEntryPoint = new DigestAuthenticationEntryPoint();
    digestAuthenticationEntryPoint.setKey("mykey");
    digestAuthenticationEntryPoint.setRealmName("myrealm");
    return digestAuthenticationEntryPoint;
}
}
base64(expirationTime + ":" + md5Hex(expirationTime + ":" + key))
expirationTime:   The date and time when the nonce expires, expressed in milliseconds
key:              A private key to prevent modification of the nonce token