Ich habe einen OAuth2-Autorisierungsserver, der Benutzerinformationen bereitstellt:
%Vor%Außerdem habe ich den OAuth2-Client als separate Spring-Boot-Anwendung implementiert.
%Vor%application.yml
%Vor%Benutzer authentifiziert erfolgreich:
%Vor%Ich kann jedoch nicht verstehen, wie das angegebene OAuth2Authentication-Objekt in meiner Anwendung verwendet wird. Es ist fast nutzlos.
Wenn ich versuche, ein Thymeleaf-Sicherheits-Tag zu verwenden
%Vor%.. die folgende Ausnahme tritt auf:
%Vor% Standard Spring Security-Methoden isUserInRole()
funktioniert auch nicht:
Sollte ich den benutzerdefinierten Thymeleaf-Sicherheitsdialekt und die hasRole () -Methode implementieren? Oder gibt es vielleicht eine einfachere Lösung?
Ok, nach viel Graben habe ich eine Lösung gefunden.
Lange Rede kurzer Sinn: ResourceServerTokenServices.loadAuthentication()
sollte überschrieben werden, um benutzerdefinierte Principals und / oder Berechtigungen aus der OAuth2-Ressourcenserverantwort zu extrahieren. Hauptlogik gekapselt in extractAuthentication()
Methode.
Konfiguration
%Vor%Service
%Vor%PS :
Die neue Spring Boot -Version bietet eine flexiblere API. Siehe PrincipalExtractor
Schnittstelle. Leider wurde es erst vor 2 Wochen hinzugefügt und wird in der aktuellen stabilen 1.3.5.RELEASE Version nicht unterstützt.
Hoffe, das hilft
Tags und Links java spring-mvc spring-security spring-boot spring-security-oauth2