2017-10-09 1 views
0

Je développe une application Spring-Boot et le problème que j'ai est le suivant:sécurité Spring OAuth 2 comportement Redirect sur/oauth/jeton

Par défaut, chaque demande à mon contrôleur est redirigé vers/login donc je Je ne peux pas l'utiliser de cette façon.

je peux désactiver/connexion en réglant

security.oauth2.resource.filter-order = 3 

dans les application.properties.

Mais je veux savoir comment le désactiver uniquement pour les non-navigateurs, donc je peux toujours utiliser le login.

Edit:

Ce serait mon approche:

http.antMatcher("/api/**") 
       .authorizeRequests().anyRequest().authenticated(); 

     http.antMatcher("/**") 
       .formLogin(); 

Tout ce qui va de/api/est le repos et doit être pris en charge par OAuth seulement. Le reste devrait être géré par Login.

Mais ça ne fonctionne toujours pas, je reçois toujours la redirection.

Peu importe, réparé. Merci userWithLongNumber!

Dans mon cas, il s'est avéré que ma sécurité Web était mal configurée. Cela fonctionne maintenant:

@Override 
protected void configure(HttpSecurity http) throws Exception { 
    http. 
      formLogin().permitAll() 
      .and() 
      .authorizeRequests().anyRequest().authenticated(); 
} 

Mon RessourceServerConfig ressemble à ceci:

@Override 
public void configure(HttpSecurity http) throws Exception { 

     http 
       .exceptionHandling() 
       .authenticationEntryPoint(customAuthenticationEntryPoint) 
       .and() 
       .logout() 
       .logoutUrl("/oauth/logout") 
       .logoutSuccessHandler(customLogoutSuccessHandler) 
       .and() 
       .headers() 
       .frameOptions().disable() 
       .and() 
       .sessionManagement() 
       .sessionCreationPolicy(SessionCreationPolicy.STATELESS) 
       .and() 
       .authorizeRequests() 
       .antMatchers("/api/**").authenticated(); 

    } 

} 

Répondre

1

Vous devez abaisser la priorité du filtre principal de la sécurité des applications.

Comme expliqué dans le tutoriel Spring Boot.

L'annotation @EnableResourceServer crée un filtre de sécurité avec @Order (SecurityProperties.ACCESS_OVERRIDE_ORDER-1) par défaut, en déplaçant la principale sécurité des applications à @Order (SecurityProperties.ACCESS_OVERRIDE_ORDER), nous pouvons faire en sorte que la règle de OAuth la ressource a la priorité.

Réglage

security.oauth2.resource.filter-order = 3

ne désactive pas le principal filtre de sécurité. Cela change simplement sa priorité à une valeur inférieure. (Les valeurs négatives ont la plus haute priorité. -3 a une haute priorité que 3)

Comme je comprends que votre problème ne règle pas correctement le matcher dans la ResourceServerConfiguration. Rendez-le plus spécifique comme suit.

http.antMatcher("/helloOAuth") 
      .authorizeRequests().anyRequest().authenticated(); 

https://github.com/lanka-guide/simple-oauth2-server a un exemple d'implémentation. Ça pourrait être utile.