46 votes

Impossible de vérifier le jeton CSRF fourni car votre session n'a pas été trouvée dans la sécurité de printemps.

Je suis à l'aide de printemps de sécurité le long avec java config

@Override
protected void configure(HttpSecurity http) throws Exception { 
    http
    .authorizeRequests()
    .antMatchers("/api/*").hasRole("ADMIN")
    .and()
    .addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class)
    .exceptionHandling()
    .authenticationEntryPoint(restAuthenticationEntryPoint)
    .and()
    .formLogin()
    .successHandler(authenticationSuccessHandler)
    .failureHandler(new SimpleUrlAuthenticationFailureHandler());

Je suis à l'aide de Postier pour tester mes services REST. J'ai obtenu un jeton csrf avec succès et je suis en mesure de vous connecter en utilisant X-CSRF-TOKEN en-tête de la demande. Mais après la connexion, lorsque je tape une requête post(je suis y compris même en-tête de la requête que j'ai utilisé pour la connexion d'une requête post), je reçois le message d'erreur suivant:

D'État HTTP 403 - n'a pas Pu vérifier la condition jeton CSRF parce que votre session n'a pas été trouvé.

Quelqu'un peut-il me guider ce que je fais de mal.

82voto

Dan Points 2094

Selon spring.io:

Quand devriez-vous utiliser la protection CSRF? Notre recommandation est d'utiliser la protection CSRF pour toute demande pouvant être traitée par un navigateur par des utilisateurs normaux. Si vous créez uniquement un service utilisé par des clients autres que les navigateurs, vous souhaiterez probablement désactiver la protection CSRF.

Donc pour le désactiver:

 @Configuration
public class RestSecurityConfig extends WebSecurityConfigurerAdapter {
  @Override
  protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable();
  }
}
 

Remarque: La protection CSRF est activée par défaut avec Java Configuration.

6voto

GuoJunjun Points 126

essayez ceci: @Override protected boolean sameOriginDisabled() { return true;}

 @Configuration
public class WebSocketSecurityConfig extends AbstractSecurityWebSocketMessageBrokerConfigurer {

    ...

    // Determines if a CSRF token is required for connecting. This protects against remote
    // sites from connecting to the application and being able to read/write data over the
    // connection. The default is false (the token is required).
    @Override
    protected boolean sameOriginDisabled() {
        return true;
    }
}
 

source: WebSocket Security: Désactiver CSRF dans WebSockets

4voto

Dario Points 745

Désactiver la protection CSRF est une mauvaise idée.

Spring générera automatiquement un nouveau jeton CSRF après chaque demande et vous devrez l'inclure dans toutes les demandes HTTP ayant des effets secondaires (PUT, POST, PATCH, DELETE).

Dans Postman, vous pouvez utiliser un test dans chaque demande pour stocker le jeton CSRF de manière globale, par exemple en utilisant CookieCsrfTokenRepository

 pm.globals.set("xsrf-token", postman.getResponseCookie("XSRF-TOKEN").value);
 

Et ensuite, incluez-le comme en-tête avec la clé X-XSRF-TOKEN et la valeur {{xsrf-token}} .

-4voto

kungyu Points 9

Je l'ai résolu en ajoutant le dernier attribut dans ma page de connexion, peut-être que cela vous rendra service.

 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"  isELIgnored="false"%>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X