Frage Frühjahrs-SicherheitserlaubnisAlle noch in Erwägung gezogenen Token in Authorization-Header und 401 zurückgegeben, wenn Token ungültig ist


Ich benutze Frühling Sicherheit oauth in meinem Projekt. Ich schließe einige URLs von der Authentifizierung aus, indem ich ResourceServerConfigurerAdapter im Frühling Sicherheitskonfiguration konfiguriere. Ich fügte hinzu http.authorizeRequests().antMatchers(url).permitAll().

Nun, was ich sehe, ist, dass, wenn ich den Authorization-Header nicht an diese URLs übergeben, es nicht authentifiziert wird. Und die API wird ordnungsgemäß aufgerufen.

Wenn der Anruf mit einem Authorization-Header durchgeführt wird, überprüft er das Token und schlägt den Aufruf fehl, wenn das Token nicht validiert wird.

Meine Frage ist, was ich tun muss, damit das Token in der Anfrage ignoriert wird, für die ich allowAll habe.


6
2018-03-29 23:21


Ursprung


Antworten:


Spring OAuth2 fängt alle URLs mit dem Header ab: Authorization Bearer xxx.

Um zu vermeiden, dass Spring OAuth2 die URL abfängt. Ich habe eine SecurityConfiguration erstellt, die eine höhere Reihenfolge als Spring OAuth2 hat.

@Configuration
@EnableWebSecurity
@Order(1) // this is important to run this before Spring OAuth2 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        List<RequestMatcher> requestMatchers = new ArrayList<RequestMatcher>();
        // allow /api/public/product/** and /api/public/content/** not intercepted by Spring OAuth2
        requestMatchers.add(new AntPathRequestMatcher("/api/public/product/**"));
        requestMatchers.add(new AntPathRequestMatcher("/api/public/content/**"));

    http
        .requestMatcher(new OrRequestMatcher(requestMatchers))
    .authorizeRequests()
      .antMatchers("/api/public/product/**", "/api/public/content/**").permitAll()
    }
}

Die obige Konfiguration erlaubt / api / public / product / ** und / api / public / content / ** von dieser Konfiguration behandelt zu werden, nicht von Spring OAuth2, da diese Konfiguration einen höheren @Order hat.

Daher wird selbst das Setzen eines ungültigen Tokens über einen API-Aufruf nicht zu einem ungültigen Zugriffstoken führen.


4
2018-06-03 02:18



Nach Feder-oauth2-Dok https://projects.spring.io/spring-security-oauth/docs/oauth2.html

Hinweis: Wenn Ihr Autorisierungsserver auch ein Ressourcenserver ist, gibt es eine weitere Sicherheitsfilterkette mit niedrigerer Priorität, die die API-Ressourcen steuert. Für die Anforderungen, die durch Zugriffstoken geschützt werden sollen, müssen ihre Pfade nicht mit denen in der Hauptbenutzer-Filterkette übereinstimmen. Stellen Sie also sicher, dass Sie in der WebSecurityConfigurer oben einen Anforderungs-Matcher angeben, der nur Nicht-API-Ressourcen auswählt.

Definieren Sie die WebSecurityConfigurer-Implementierung mit einer höheren Reihenfolge als ResourceServerConfig.


0
2017-07-07 14:08