Ich habe Probleme, meinen Angular2-Client mit meinem Spring-Server zu kommunizieren, da ich Spring-Sicherheit hinzugefügt habe, nämlich wenn ich versuche, ein JSON mit Authentifizierungsinformationen an die Server-Login-URL zu senden Ich erhalte eine 403 "Ungültiges CSRF-Token 'null' wurde im Anforderungsparameter '_csrf' oder in der Kopfzeile 'X-CSRF-TOKEN' gefunden."Spring sendet kein CSRF-Token bei Antwort
Ich verstehe, dass ich ein Token auf dem Header meiner Antworten übergeben sollte, um vom Client verwendet zu werden, aber dieses Token wird nicht übergeben. Ich habe versucht this answer, aber das Token wird immer noch nicht übergeben. Ich sende auch Anfragen über den Postboten und der Token kommt auch nicht an.
webSecurityConfig.xml
:
<http entry-point-ref="restAuthenticationEntryPoint">
<intercept-url pattern="/api/**" access="hasRole('ROLE_USER')"/>
<form-login
authentication-success-handler-ref="mySuccessHandler"
authentication-failure-handler-ref="myFailureHandler"
/>
<logout />
</http>
<beans:bean id="mySuccessHandler"
class="com.eficid.cloud.security.rest.AuthenticationSuccessHandler"/>
<beans:bean id="myFailureHandler" class=
"org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"/>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="temp" password="temp" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
SpringSecurityConfiguration
@Configuration
@ImportResource({ "classpath:webSecurityConfig.xml" })
@ComponentScan("com.eficid.cloud.security.rest")
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
public SpringSecurityConfig() {
super();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.httpBasic().and().authorizeRequests()
.antMatchers("/spring-security-rest/login").permitAll().anyRequest()
.authenticated().and().csrf()
.csrfTokenRepository(csrfTokenRepository()).and()
.addFilterAfter(csrfHeaderFilter(), CsrfFilter.class);
}
private Filter csrfHeaderFilter() {
return new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
CsrfToken csrf = (CsrfToken) request.getAttribute(CsrfToken.class
.getName());
if (csrf != null) {
Cookie cookie = WebUtils.getCookie(request, "XSRF-TOKEN");
String token = csrf.getToken();
if (cookie == null || token != null
&& !token.equals(cookie.getValue())) {
cookie = new Cookie("XSRF-TOKEN", token);
cookie.setPath("/");
response.addCookie(cookie);
}
}
filterChain.doFilter(request, response);
}
};
}
private CsrfTokenRepository csrfTokenRepository() {
HttpSessionCsrfTokenRepository repository = new HttpSessionCsrfTokenRepository();
repository.setHeaderName("X-XSRF-TOKEN");
return repository;
}
}
Der Header noch nicht in der Antwort übergeben wird – napstablook
haben Sie, wenn Sie in Cookie CSRF überprüft? – Jarek
Ich tat, kein Cookie wurde zurückgegeben – napstablook