Wir entwickeln die Spring 4-REST/JSON-API, benötigen aber einen benutzerdefinierten Authentifizierungsdienst zur Authentifizierung gegenüber dem Dienst eines Drittanbieters.Spring-Sicherheit 4. JSON-REST mit benutzerdefinierter Authentifizierung und Autorisierung
Einschränkungen: Wir nicht möchte den Benutzer nach Benutzername/Passwort fragen. Wir authentifizieren uns mit "Cookie" (senden Sie mit dem Initiator der Anfrage). Und wir brauchen diesen Authentifizierungsprozess im Hintergrund. (Kann komisch klingen, aber das ist der Fall).
können wir das mit der Registrierung von benutzerdefinierten Authentifizierung/Autorisierungsanforderung Filter implementieren. Aber das hat dazu geführt, dass wir die Macht des "Autorisierungs" -Moduls im Frühling verloren haben, das wir später nutzen wollen.
Also, was wir bisher getan haben, schrieben individuellen WebSecurityConfigurerAdapter mit unserem eigenen kundenspezifischen AuthenticationProvider und UserDetailsService aber diese Konfiguration scheint nicht zu funktionieren.
die Anwendung geht nicht innerhalb AuthenticationProvider.authenticate
hier ist die Konfiguration, die wir hatten.
AuthenticationProvider.java:
@Service
public class AuthenticationService implements AuthenticationProvider, UserDetailsService {
@Override
public Authentication authenticate(Authentication auth) throws AuthenticationException {
// DOESN'T ENTER THIS FUNCTION
// do authentication stuff
}
@Override
public boolean supports(Class<?> authentication) {
// JUST FOR TESTING
return true;
}
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
// DOESN'T ENTER THIS METHOD
return null;
}
}
SecurityConfig.java:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private static final Logger LOGGER = LoggerFactory.getLogger(SecurityConfig.class);
@Autowired
private AuthenticationService authService;
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/ignoredURL/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable() //HTTP with Disable CSRF
.authorizeRequests()
.antMatchers("/api/XYZ/**").hasRole("ADMIN")
.anyRequest().authenticated();
// adding ".httpBasic()" automatically prompts user for username/password
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// THIS IS NOT TYPO, I use one service implements both interfaces.
auth.userDetailsService(authService);
auth.authenticationProvider(authService);
}
}