Spring Rest-Service - Invalid CSRF token, wenn ich versuche, login

Ich habe eine Spring MVC REST-service, der mit Spring Security (3.2.5.RELEASE) aktiviert. Wenn ich auf @EnableWebMvcSecurity, ein login-Formular automatisch generiert wird, für mich http://localhost:8080/login. Wenn ich dieses Formular anmelden, klappt alles wunderbar.

Tritt das problem auf, wenn ich bei der Anmeldung durch senden einer POST-Anforderung direkt. In meinem post-Anfrage, die ich geben Sie Benutzernamen und Passwort. Außerdem habe ich den http-header "X-CSRF-TOKEN" und für die header-Wert, ich benutze den JSESSIONID ich, dass ich wurde generiert in einem cookie. Aber wenn ich senden Sie diese POST-Anforderung erhalte ich das folgende Ergebnis:

HTTP Status 403 - Invalid CSRF Token '29F5E49EFE8D758D4903C0491D56433E' 
was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'.

Was mache ich falsch? Bin ich die Bereitstellung der falschen token Wert? Was ist das für JSESSIONID? Wenn ich nicht geben Sie einen Wert für diesen header, oder lassen Sie die header alle zusammen, sagt mir "Null-CSRF-token gefunden".

Unten ist mein Spring Security-Konfiguration:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig 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("/secure/**").authenticated()
                .and()
            .formLogin()
                .usernameParameter("username")
                .passwordParameter("password")        
                .and()
            .logout()
                .and()
            .httpBasic()
                .and()
            .csrf(); 
    }
}

Ich würde wirklich zu schätzen jede Hilfe!!! Vielen Dank im Voraus!

  • Bei näherer Prüfung der HTTP-Anforderung/Antwort-wenn ich das login-Formular, es erscheint die JSESSIONID ist nicht der Wert, den ich bieten sollte für die X-CSRF-TOKEN-header. Wenn ich die Anmeldung über das Formular, ich sehe das CSRF-token wird in der Anforderung enthalten sind. Wie würde ich diesen Wert abzurufen, Wenn ich brauchte, um Benutzer durch Aufrufe an einen REST-service?
  • Dieser Wert kann erhalten werden, indem zunächst die Herstellung eines 'GET' aufrufen und dann 'POST'
InformationsquelleAutor AlexG | 2015-02-25
Schreibe einen Kommentar