Ich verwende Spring Security mit SpringMVC, um eine Webanwendung zu erstellen (ich werde dies aus Gründen der Übersichtlichkeit als WebApp bezeichnen), die mit einer vorhandenen Anwendung spricht (ich werde dies als BackendApp bezeichnen).
Ich möchte Authentifizierungsverantwortlichkeiten an die BackendApp delegieren (damit ich die beiden Anwendungen nicht synchronisieren muss).
Um dies zu implementieren, möchte ich, dass die WebApp (Running Spring Security) über REST mit dem vom Benutzer angegebenen Benutzernamen und Kennwort in einer Form mit der BackendApp kommuniziert und sich basierend darauf authentifiziert, ob die Antwort der BackendApp 200 OK oder 401 Unauthorized lautet.
Ich verstehe, dass ich einen benutzerdefinierten Authentifizierungs-Manager schreiben muss, um dies zu tun. Ich bin jedoch sehr neu in Spring und kann keine Informationen zur Implementierung finden.
Ich glaube, ich muss so etwas tun:
public class CustomAuthenticationManager implements AuthenticationManager{
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getName();
String pw = authentication.getCredentials().toString();
// Code to make rest call here and check for OK or Unauthorised.
// What do I return?
}
}
Setze ich authentication.setAuthenticated (true), wenn dies erfolgreich ist, und false, wenn dies nicht der Fall ist?
Wie konfiguriere ich die Federsicherheit nach dem Schreiben, um diesen Authentifizierungsmanager mithilfe einer Java-Konfigurationsdatei zu verwenden?
Vielen Dank im Voraus für jede Hilfe.
Schauen Sie sich mein Beispiel unten an. Sie müssen ein UsernamePasswordAuthenticationToken zurückgeben. Es enthält den Principal und die GrantedAuthorities. Hoffe ich konnte helfen :)
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String username = authentication.getPrincipal() + "";
String password = authentication.getCredentials() + "";
User user = userRepo.findOne(username);
if (user == null) {
throw new BadCredentialsException("1000");
}
if (!encoder.matches(password, user.getPassword())) {
throw new BadCredentialsException("1000");
}
if (user.isDisabled()) {
throw new DisabledException("1001");
}
List<Right> userRights = rightRepo.getUserRights(username);
return new UsernamePasswordAuthenticationToken(username, null, userRights.stream().map(x -> new SimpleGrantedAuthority(x.getName())).collect(Collectors.toList()));
}
PS: userRepo und rightRepo sind Spring-Data-JPA-Repositorys, die auf meine benutzerdefinierte Benutzer-DB zugreifen
SpringSecurity JavaConfig:
@Configuration
@EnableWebMvcSecurity
public class MySecurityConfiguration extends WebSecurityConfigurerAdapter {
public MySecurityConfiguration() {
super(false);
}
@Override
protected AuthenticationManager authenticationManager() throws Exception {
return new ProviderManager(Arrays.asList((AuthenticationProvider) new AuthProvider()));
}
}
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen