Ich habe versucht, OAuth 2 für meine Anwendung zu verwenden, aber ich laufe weiterhin mit konfigurationsbezogenen Fehlern, insbesondere mit Authentifizierungstoken, um. Die Anwendung ist so eingerichtet, dass sie sowohl als Autorisierungs- als auch als Ressourcenserver fungiert. Ich habe es erfolgreich so konfiguriert, dass Tokens mit dem Kennwortertyp mit einem speicherinternen Tokenspeicher ausgestellt wurden. jedes Mal, wenn ich jedoch versuchen, für beschränkte Ressourcen-Anforderungen zu senden, erhalte ich Fehler zu sagen:Wie richte ich PreAuthenticationAuthenticationProvider ein?
org.springframework.security.authentication.ProviderNotFoundException: No AuthenticationProvider found for org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken
So habe ich versucht, ein PreAuthenticationAuthenticationProvider
in meiner Konfiguration einrichten:
@Autowired
private UserDetailsManager userManager;
@Bean
public AuthenticationProvider preAuthenticationAuthenticationProvider() {
PreAuthenticatedAuthenticationProvider authenticationProvider =
new PreAuthenticatedAuthenticationProvider();
UserDetailsByNameServiceWrapper userDetailsWrapper = new UserDetailsByNameServiceWrapper(userManager);
authenticationProvider.setPreAuthenticatedUserDetailsService(userDetailsWrapper);
return authenticationProvider;
}
Aber ich bin immer NullPointerException
in seltsamen Orten, wie:
java.lang.NullPointerException: null
at org.springframework.security.authentication.AccountStatusUserDetailsChecker.check(AccountStatusUserDetailsChecker.java:17) ~[spring-security-core-4.0.3.RELEASE.jar!/:4.0.3.RELEASE]
ich frage mich, was die einfachste Konfiguration hierfür ist, und warum ich es in erster Linie müssen? Liegt es daran, dass ich @PreAuthorize
Anmerkungen habe?
Hier ist, wie ich den Ressource-Server eingerichtet:
@Configuration
protected static class ResourceServer extends ResourceServerConfigurerAdapter {
@Autowired
private TokenStore tokenStore;
@Autowired
private AuthenticationManager authenticationManager;
@Override
public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
resources.tokenStore(tokenStore).authenticationManager(authenticationManager);
}
@Override
public void configure(HttpSecurity http) throws Exception {
//http configuration
}
}
Die TokenStore
ist nur ein Beispiel von InMemoryTokenStore
und AuthenticationManager
wird auf diese Weise eingerichtet:
@Configuration
protected static class WebSecurity extends WebSecurityConfigurerAdapter {
@Autowired
protected UserDetailsManager userManager;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(preAuthenticationAuthenticationProvider())
.userDetailsService(userManager).passwordEncoder(PASSWORD_ENCODER);
}
@Bean
@Override
protected AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManager();
}
@Bean
protected AuthenticationProvider preAuthenticationAuthenticationProvider() {
PreAuthenticatedAuthenticationProvider authenticationProvider =
new PreAuthenticatedAuthenticationProvider();
UserDetailsByNameServiceWrapper userDetailsWrapper = new UserDetailsByNameServiceWrapper(userManager);
authenticationProvider.setPreAuthenticatedUserDetailsService(userDetailsWrapper);
return authenticationProvider;
}
}
Können Sie erklären, was seltsame Orte bedeuten? Wie haben Sie Ihren Authentifizierungsserver und Ressourcenserver konfiguriert? – aksappy
Ich habe die Frage mit einigen Zeilen aus dem StackTrace aktualisiert. –
Der Authentifizierungsanbieter scheint nicht ordnungsgemäß mit Ihrem Authentifizierungsmanager verbunden zu sein. Verwenden Sie eine Annotation-basierte Konfiguration oder XML? Können Sie die Sicherheitskonfigurationen Ihres Ressourcenservers teilen? – aksappy