Ich schreibe gerade die Sicherheit für eine REST-Webanwendung und als ich endlich einen benutzerdefinierten CSRF-Filter erhalte, merke ich, dass ich nichts in meine POST-Datei schreiben kann/Login, weil ich das CSRF-Token brauche (ein GET ist aber möglich). Die Sache ist, wie kann ich das Token zum ersten Mal abrufen, damit ich es in das POST-Formular hinzufügen kann, das zum Login geht?Benutzerdefinierter CSRF-Filter für Spring Security ignoriert nicht meine/login
Ich benutze Postman als meine REST-Client und die einzige Möglichkeit, wie ich das Token erhalten kann, ist zuerst eine Dummy GET, so dass ich das Token abrufen und dann in den POST hinzufügen kann, aber ich nehme an, dies könnte nicht so sein.
Ich bin neu in Web-Sicherheit, csrf und bin auch kein Front-End-Entwickler, also könnte das Problem dort liegen.
PD: Meine Sicherheit:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterAfter(new CsrfTokenResponseHeaderBindingFilter(), CsrfFilter.class)
.authorizeRequests()
.antMatchers("/login").permitAll().anyRequest().authenticated();
http
.formLogin().loginPage("/login").permitAll().successHandler(authenticationSuccessHandler)
.failureHandler(authenticationFailureHandler)
.and()
.rememberMe().rememberMeParameter("remember-me").tokenValiditySeconds(2000)
.and()
.exceptionHandling().authenticationEntryPoint(authenticationEntryPoint)
.and()
.sessionManagement().maximumSessions(1);
}
auch versucht, diese, aber nicht gut:
@Override
public void configure(WebSecurity webSecurity) throws Exception
{
webSecurity
.ignoring().antMatchers("/login").anyRequest();
}
Ich verwende diesen benutzerdefinierten Filter, Kredite an den Autor: https://github.com/aditzel/spring-security-csrf-filter
PD2: Falls ich nicht klar genug war, möchte ich mich mit einem POST einloggen, ohne zuerst den Dummy zu machen. Ich weiß nicht, ob es sich um ein Code-Problem oder ein konzeptionelles (sicherheitsrelevantes) Problem handelt.
So war es ein konzeptionelles Problem, nachdem alle. Zwei Dinge mehr: es ist sicher, dass? Ich meine, jeder REST-Endpunkt, der ein GET erhält, ruft das CSRF-Token ab, sogar nicht authentifizierte GETs (natürlich ohne authentifizierten Cookie, auch nicht authentifizierte Petitionsantwort ist ein 401-Fehler). Zweitens: In einem Produktions-Release mit seinem Frontend, wenn ich die Umleitungen und Routing-Sachen mache, ist es notwendig, dass ein GET es an den Server sendet, damit es zuerst das CSRF-Token abrufen kann und den Benutzer dann im Login-Menü belassen? Oder sollte der Ansatz anders sein? Ich werde die Antwort abstimmen, nachdem diese beiden gelöst sind –
Die beiden Konzepte und Authentifizierung) sind verwandt, aber anders. CSRF soll sicherstellen, dass alle Anrufe von derselben Quelle kommen. Das heißt, niemand kann die URL ohne das Token kopieren und wiederverwenden. Bei der Authentifizierung muss sichergestellt werden, dass der Aufrufer –
ist. Nach CSRF ist weiterhin eine Authentifizierung erforderlich, um sicherzustellen, dass der Aufrufer die richtigen Anmeldeinformationen bereitstellt und die Sitzung authentifiziert wird. Benötigt möglicherweise keinen CSRF für den REST-Endpunkt, der keine Sitzung benötigt. –