5

Wie konfigurieren Sie Spring 4.0 und Spring Security (3.2.0) für die Digest-Authentifizierung ausschließlich mit javaconfig (kein XML)? Ich benutze die folgende Konfigurationsklasse, jedoch werden alle Anfragen mit HTTP 401 verweigert und "Nonce sollte zwei Tokens ergeben haben, aber war (... Nachricht hört einfach dort auf)".Spring Security Digest Auth mit JavaConfig Beispiel

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

ich auf der Clientseite zu genehmigen bin versucht, durch den Header einschließlich:

Authorization: Digest username = "user", realm = "mein", nonce = "", uri = "/ Service ? param = 98 ", Antwort =" fcd46faf42a583499d4e7f0371171ef2 ", opaque =" "

Ich bin in der Lage, auf die vorgesehenen Dienste zuzugreifen, wenn ich diese Klasse auf eine HttpBasic-basierte Konfiguration zurücksetze. Ist das Problem mit meiner Konfiguration oder mit meiner Anfrage? Der Großteil des obigen Codes wurde von einem anderen Beitrag ausgeliehen, aber ich kann in diesem Zusammenhang keine Dinge zum Laufen bringen. All dies läuft in Spring Boot 0.5.0M7.

Danke.

Antwort

0

Die Anfrage scheint unvollständig zu sein. Der Parameter "Mittag" sollte einen Base64-kodierten Wert gemäß der digest processing filter Referenz enthalten.

Zentrale zu Digest-Authentifizierung ist ein "nonce". Dies ist ein Wert, den der Server generiert. Spring Security des nonce nimmt das folgende Format:

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

Spring und Patrick beschreiben beide einen Fluss, wo ein Antrag gestellt wird, wenn nichts anderes eine Nonce aus dem Server zu erhalten, stellt der Server diesen Header

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

in seiner 401-Antwort sagen: "hey, wer du bist", um die cl ient. Mit dem Nonce und anderen stuff wird ein MD5-Hash erstellt und an den Server gesendet. Der Server ist jetzt glücklich und verarbeitet die Anfrage. Schauen Sie auf die helle Seite, die Sie gemacht haben, Schritt 1 und überprüfen Sie die Links für eine bessere Erklärung