Ich habe eine Spring App - nicht eine Spring Boot App - das ich versuche, einen Abschnitt der API als OAuth2 mit Spring Security geschützt zu deklarieren. Meine Autorisierung und allgemeine Ressourcenzugriffskonfiguration funktioniert großartig, wenn ich http
Elemente im XML definiere, aber wenn ich versuche, die Ressourcenzugriffsblöcke unter Verwendung von ResourceServerConfigureAdapter#configure(HttpSecurity)
- komplett mit @EnableResourceServer
usw. zu implementieren, wird die Methode configure
niemals ausgelöst (Ende-zu-Ende-Tests schlagen ebenfalls fehl)). Beispiel Java config unter:Spring Security OAuth Java-Konfig
Ich habe versucht, ein paar verschiedene Möglichkeiten zur Durchführung der Config, aber keine Würfel. Nämlich habe ich beide Top-Level @Configuration
Klassen, die ResourceServerConfigurerAdapter
erweitern und Bean-Methoden ResourceServerConfiguration
wie in Dave Syer's example; Ich habe auch versucht, die Reihenfolge auf Ordered.HIGHEST_PRECEDENCE
auf den entsprechenden Beans explizit festzulegen.
Es ist sehr wichtig zu beachten, dass der Großteil der Legacy-Sicherheitskonfiguration der Anwendung über XML-Elemente wie oben definiert ist. Eine weitere mögliche rote Markierung über meine Konfiguration - um den Token-Endpunkt zur Authentifizierung gegen die Basisauth client_id zu bekommen: client_secret Ich musste meine eigene BasicAuthFilter(ProviderManager(DaoAuthProvider(ClientUserDetailsService(clientDetailsService)))))
wenn, weil es die Vanille ist und 'richtige' Weise, den Token-Endpunkt zu authentifizieren, I ' d erwarten Sie, dass die Spring-Konfig nur voreingestellt ist.
Wie auch immer, in keiner Situation kann ich ResourceServerConfigureAdapter#configure(HttpSecurity)
zu feuern bekommen. Meine laufenden Theorien sind:
etwas über die vorhergehenden XML HTTP Blöcke verhindert meine
configure
Methode immer nochDas ist einfach eine Feder-Boot nur Funktion aufgerufen wird - obwohl ich gesehen habe keine Sprache in diesem Sinne
Es ist gerade nach oben ein Objekt im Anwendungskontext, die ich (wieder bin fehlt, die operativen Anmerkungen, die ich bei der Arbeit haben - neben den offensichtlichen
@Configuration
und@Bean
- sind 01.238.,@EnableAuthenticationServer
und@EnableResourceServer
).Ich habe einige Konfigurationsfehler (duh) gemacht.
Alle Beispiele sehr geschätzt
Beispiel OAuth2 Konfigurationsklasse (eine der wenigen verschiedenen Iterationen) unten würde:
@Configuration
@EnableWebSecurity
@EnableResourceServer
public class OAuth2Configuration {
... etc ...
@Bean
public ResourceServerConfiguration adminResources() {
// copped from https://github.com/spring-projects/spring-security-oauth/tree/master/tests/annotation/multi
ResourceServerConfiguration resource = new ResourceServerConfiguration() {
public void setConfigurers(List<ResourceServerConfigurer> configurers) {
super.setConfigurers(configurers);
}
};
resource.setConfigurers(Collections.singletonList(new ResourceServerConfigurerAdapter() {
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.resourceId("oauth2/control");
}
@Override
public void configure(HttpSecurity http) throws Exception {
http.antMatcher("/api/**")
.authorizeRequests().anyRequest().hasRole("OAUTH_USER").and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
// before=PRE_AUTH_FILTER
.addFilterBefore(oAuth2AuthenticationProcessingFilter, AbstractPreAuthenticatedProcessingFilter.class)
.csrf().disable()
.anonymous().disable()
.exceptionHandling()
.accessDeniedHandler(oAuth2AccessDeniedHandler)
.authenticationEntryPoint(loginUrlAuthenticationEntryPoint);
}
}));
resource.setOrder(Ordered.HIGHEST_PRECEDENCE);
return resource;
}
@Configuration
@EnableAuthorizationServer
public static class OAuth2AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
... etc ...
}
}
Analogogous <http>
Config dass ist aufgenommen:
<sec:http pattern="/api/**" create-session="stateless"
entry-point-ref="loginUrlAuthenticationEntryPoint">
<sec:anonymous enabled="false" />
<sec:csrf disabled="true"/> <!-- csrf tokens don't make sense for a 3rd party API -->
<sec:custom-filter ref="oauth2ProcessingFilter" before="PRE_AUTH_FILTER"/>
<sec:access-denied-handler ref="oauthAccessDeniedHandler" />
<sec:intercept-url pattern="/api/**" access="hasRole('OAUTH_USER')" />
</sec:http>
erraten Sollte haben. Danke @Sofia! – jwilner