Ich habe eine vorhandene Webanwendung, die Spring-Sicherheit für die Authentifizierung verwendet. Es verwendet auch die Sitzungsverwaltung, damit der Benutzer für einen vordefinierten Zeitraum angemeldet sein kann, und XSRF-Tokens, um XSS-Angriffe zu verhindern.Spring Security Sitzung/Xsrf-Konfiguration von Pfad
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.exceptionHandling()
.authenticationEntryPoint(restEntryPoint())
.and()
.headers().addHeaderWriter(new StaticHeadersWriter("Server",""))
.and()
.httpBasic()
.authenticationEntryPoint(restEntryPoint())
.and()
.logout().addLogoutHandler(myLogoutHandler())
.logoutSuccessHandler(logoutSuccessHandler())
.and()
.authorizeRequests()
.antMatchers("/index.html", "/login", "/").permitAll()
.antMatchers(HttpMethod.OPTIONS).denyAll()
.antMatchers(HttpMethod.HEAD).denyAll()
.anyRequest().authenticated()
.and()
.authenticationProvider(myAuthenticationProvider)
.csrf()
.csrfTokenRepository(csrfTokenRepository())
.and()
.addFilterAfter(csrfHeaderFilter(), SessionManagementFilter.class);
// @formatter:on
}
Dies funktioniert hervorragend für die Webanwendung. Jetzt wurde ich aufgefordert, eine Konfiguration hinzuzufügen, die Drittanbieter-Client-Anwendungen meine Dienste über reine REST-Aufrufe aufrufen würde, dh sie sollten vollständig zustandslos sein und HTTP-Basisauthentifizierung verwenden - keine Sitzung sollte erstellt werden und xsrf sollte deaktiviert werden (I denken...).
Ich kann einen gemeinsamen URL-Pfad für all diese Client-API-Aufrufe definieren. Aber wie kann ich meine vorhandene Sicherheitskonfiguration und meinen Server nutzen, um beide Anforderungen zu unterstützen?