2017-02-20 3 views
0

Unsere Angular-basierte Webanwendung ist in das Unternehmensportal integriert, das auf dem unterschiedlichen Domänen- und Kontextpfad ausgeführt wird. Ich benutze Spring Security-basierte CSRF-Token für die Validierung der eingehenden Anfragen. Die App funktioniert perfekt in lokalen, aber wenn ich es mit Portal integriere, scheitern alle Post-Aufrufe 403, weil Angular XSRF-Token nicht lesen und das X-XSRF-Token in den Anfrage-Headern auf die API-Aufrufe setzen kann. Bei der Untersuchung stellte ich fest, dass die Kontextpfade von Portal und App unterschiedlich sind und daher setzt Spring das XSRF-Token mit Pfad, Expires und Domain als Null. Gibt es eine Möglichkeit, XSRF-Token auf einen bestimmten Cookie-Pfad zu setzen, wenn Spring es erstellt?So legen Sie CSRF-Token auf verschiedene Kontextpfade fest

Hinweis: Ich habe eine alternative Lösung, um Filter zu erstellen und die Cookies von Anforderungsheadern zu lesen und einen neuen Cookie im Browser mit dem gewünschten Pfad zu löschen. Ich suche eine Lösung auf Konfigurationsebene.

Antwort

0

In Ihrer Konfiguration Sicherheit (Java-Datei), ist es möglich, hinzuzufügen:

private CsrfTokenRepository getCsrfTokenRepository() { 
    CookieCsrfTokenRepository tokenRepository = CookieCsrfTokenRepository.withHttpOnlyFalse(); 
    tokenRepository.setCookiePath("/"); 
    return tokenRepository; 
} 

und in der Funktion configure(...), die Linie zu ändern:

http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and()...

mit

http.csrf().csrfTokenRepository(this.getCsrfTokenRepository()).and()...

Dies ermöglicht eine Lösung, um den Pfad für den Cookie XSRF-TOKEN zu personalisieren.

Verwandte Themen