0

Ich frage mich, ob in Spring Security ist es möglich, alle Endpunkte eines Rest-API zu sperren, und eine Anmeldung durch eine benutzerdefinierte Validierung tun, ohne den Benutzernamen und das Passwort überhaupt zu tun.Spring Security benutzerdefinierte Validierung ohne Benutzer-Passwort beteiligt

Es ist wie erstellen Sie eine benutzerdefinierte Prüfmethode, die ein Token und nicht Benutzer/Pass erhält. Die Methode validiert das Token dann bei einer dritten Partei, die den Anrufer bereits validiert hat.

Das klingt vertraut OAuth2 nur, dass das Back-End-API durch die Feder sicher zu sein braucht, und zugleich ist es nicht der OAuth2 Client:

  1. Wir bauen eine Login-Funktion.
  2. Wir haben einen Client (Mobile App), Backend (REST wie Endpoints Spring MVC) und einen AuthProvider für OAuth2/OpenIdConnect-Flows.
  3. Der OAuth/OpenIDConnect-Flow findet nur zwischen dem Mobile und OpenIDProvider statt. (ein erster Anruf erfolgt von Handy zu Backend, um einige Details für OAuth-Flüsse bereitzustellen)
  4. Sobald die Autorisierung erfolgreich war, erhält die mobile App einen auth_code, und nur dann wird das Backend von der App zu "Login" aufgerufen auth_code, exchange für access_token und Benutzersitzung erstellen. (Wir müssen eine Sitzung haben).
  5. Wie Sie sehen Backend Art von "Login" in dem Sinne, dass nur die Auth_code erhalten muss, und validieren Sie es mit dem AuthProvider vor dem Erstellen einer Sitzung.

Vielen Dank!

Alle Kommentare oder Referenzen sind sehr willkommen.

Antwort

1

Spring Security stellt fest, ob ein Benutzer ist authentifiziert durch Blick auf die SecurityContext in der SecurityContextHolder. Dies bedeutet, dass Sie den Benutzer authentifizieren können Sie jedoch gerne mit dem folgenden:

boolean userIsAuthenticated = ... 
if(userIsAuthenticated) { 
    Authentication request = new UsernamePasswordAuthenticationToken(name, password); 
    Authentication result = ... 
    SecurityContext context = SecurityContextHolder.createEmptyContext(); 
    context.setAuthentication(result); 
    SecurityContextHolder.setContext(context); 
} 
+0

Vielen Dank Rob Winch! Ihrem Rat folgend, konnte ich einen benutzerdefinierten Filter und Anbieter verwenden, um benutzerdefinierte Validierungen zu verarbeiten. – munilvc

1

Spring Security ist ein sehr flexibles Framework, das eine Vielzahl von Schnittstellen veröffentlicht, mit denen der Benutzer das Verhalten nach Bedarf anpassen kann.

würde ich die folgenden Ressourcen empfehlen zu lernen, wie um dies zu realisieren:

+1

Vielen Dank für die Antwort! Die Links sind sehr nützlich und das Video ist einfach großartig! – munilvc

Verwandte Themen