Das Szenario wir suchen ist wie folgt:Spring Security unerwartetes Verhalten für REST-Endpunkte Authentifizierung?
- Client mit REST-URL zu einer REST Login
- Frühling Micro (mit Spring Security) verbindet Token
- der Client hält das Token
- der Client ruft andere REST-Endpunkte mit demselben Token auf.
200 OK
und ein Login zurückgeben sollte
Allerdings sehe ich, dass der Client 302
und einen Location
Header wird immer zusammen mit dem Token. Es tut also authentifizieren, aber mit unerwünschten HTTP-Antwort Statuscode und Header.
Die Spring Security-Konfiguration wie folgt aussieht:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf()
.disable() // Refactor login form
// See https://jira.springsource.org/browse/SPR-11496
.headers()
.addHeaderWriter(new XFrameOptionsHeaderWriter(XFrameOptionsHeaderWriter.XFrameOptionsMode.SAMEORIGIN))
.and()
.formLogin()
.loginPage("/signin")
.permitAll()
.and()
.logout()
.logoutUrl("/signout")
.permitAll()
.and()
.authorizeRequests()
.antMatchers("/", "/home").permitAll()
.anyRequest().authenticated();
...
}
Ich habe versucht, Abfangjäger und Hinzufügen von Filtern, aber nicht sehen kann, wo 302 und Ort festgelegt und werden im Frühjahr Seite hinzugefügt. jedoch die Location
Header in den Antwort-Header nicht zeigen, auf der Client-Seite empfing (zusammen mit dem Rest des Spring Security Header LINK):
Server=Apache-Coyote/1.1
X-Content-Type-Options=nosniff
X-XSS-Protection=1; mode=block
Cache-Control=no-cache, no-store, max-age=0, must-revalidate
Pragma=no-cache
Expires=0
X-Frame-Options=DENY, SAMEORIGIN
Set-Cookie=JSESSIONID=D1C1F1CE1FF4E1B3DDF6FA302D48A905; Path=/; HttpOnly
Location=http://ec2-35-166-130-246.us-west-2.compute.amazonaws.com:8108/ <---- ouch
Content-Length=0
Date=Thu, 22 Dec 2016 20:15:20 GMT
Jeder Vorschlag, wie man es wie erwartet funktioniert ("200 OK ", keine Location-Header und das Token)?
HINWEIS: Verwenden von Spring Boot, Spring Security, keine Benutzeroberfläche, nur Client-Code, der REST-Endpunkte aufruft.
Wir versuchen, eine URL zu erstellen, wenn sich die App mit POST und Anmeldeinformationen anmeldet und ein Anmelde-Token erhält. mir ist nicht klar, warum es ein 302 sein sollte. Ich vermisse vielleicht etwas ... – Roy
// client calls: new RestTemplate(). execute (SIGIN_URL, HttpMethod.POST, \t neu RequestCallback() {... }, \t neue ResponseExtractor ... { \t public Object extractData (...) {// Statuscode 302 jetzt \t headersToUpdate.add ("Cookie", response.getHeaders(). getFirst ("Set- Cookie ")); \t return null;} (No UI und Tasten) – Roy