5

如何使用javaconfig(無XML)完全配置Spring 4.0和Spring Security(3.2.0)以進行摘要式身份驗證?我正在使用下面的配置類,但是所有請求都被HTTP 401拒絕,「Nonce應該已經產生了兩個令牌,但是(...消息只是停在那裏)」。Spring Security Digest Auth使用JavaConfig示例

@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; 
} 
} 

我試圖通過包括頭在客戶端授權:

授權:文摘名= 「用戶」,境界= 「MYREALM」,隨機數= 「」,URI =「/服務?param = 98「,response =」fcd46faf42a583499d4e7f0371171ef2「,opaque =」「

我能夠訪問預期的服務,如果我將此類恢復到基於HttpBasic的配置。問題與我的配置或與我的要求?大部分上面的代碼都是從另一篇文章中借用的,但是在這種情況下,我無法得到正確的結果。所有這些都在Spring Boot 0.5.0M7中運行。

謝謝。

回答

0

該請求似乎不完整。 noonce參數應該包含根據digest processing filter引用的base64編碼值。

Digest Authentication的核心是一個「隨機數」。這是服務器生成的值。 Spring Security的現時採用以下格式:

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 
0

SpringPatrick均描述,其中要求由流,如果不出意外,以從服務器獲取一個隨機數,服務器提供這個頭

「WWW身份驗證:摘要境界=」 境界」,現時= 「IVjZjc3Yg ==」,QOP = 「權威性」

在其401響應

說: 「嘿,是誰你」 的CL ient。使用隨機數和其他stuff創建一個md5散列併發送到服務器。服務器現在很高興並處理請求。看看你做的第1步,並檢查鏈接以獲得更好的解釋

相關問題