Ich möchte, dass mein Server ein ResourceServer ist, der ein Bearer Access-Token akzeptieren kann
Wenn ein solches Token jedoch nicht existiert, möchte ich den OAuth2Server zur Authentifizierung meines Benutzers verwenden.
Ich versuche es wie folgt:
%Vor% In diesem Fall funktioniert jedoch nur die @EnableResourceServer
Annotation. Es gibt
Und leite mich nicht auf die Login-Seite
um Ich habe erwähnt, dass @Order
wichtig ist, wenn ich die Annotation @Order(0)
hinzufüge,
Ich werde auf die Anmeldeseite umgeleitet, allerdings kann ich nicht mit dem access_token in Http header auf meine Ressource zugreifen:
Wie kann ich mein Ziel erreichen? Ich möchte Access Token und SSO gleichzeitig verwenden.
Danke ~
Die Verwendung beider Konfigurationen für dieselbe Anforderung wäre mehrdeutig. Es könnte eine Lösung dafür geben, aber klarer definieren Sie separate Anfragegruppen:
Um dies zu erreichen, trennen Sie die Konfigurationen mit Request Matcher:
%Vor%Und schließe diese aus der sso-Filterkette aus:
%Vor% Und legen Sie alle Ihre Ressourcen unter /resources/**
Natürlich werden beide in diesem Fall die gleiche oauth2 Konfiguration verwenden ( accessTokenUri
, jwt.key-value
, etc.)
UPDATE1:
Tatsächlich können Sie Ihr ursprüngliches Ziel erreichen, indem Sie diesen Request Matcher für die obige Konfiguration verwenden:
%Vor%UPDATE2: (Erklärung von @ Sid-Morads Kommentar)
Spring Security erstellt eine Filterkette für jede Konfiguration. Der Anfrage-Matcher für jede Filterkette wird in der Reihenfolge der Konfigurationen ausgewertet.
WebSecurityConfigurerAdapter
hat die Standardreihenfolge 100 und ResourceServerConfiguration
ist standardmäßig 3. Was bedeutet, dass ResourceServerConfiguration
's Anfrage-Matcher zuerst ausgewertet wurde. Diese Reihenfolge kann für diese Konfigurationen wie folgt überschrieben werden:
%Vor%
Also, Request Matcher wird nicht für SsoSecurityConfiguration
im obigen Beispiel benötigt. Aber gut zu wissen, die Gründe dafür:)
Tags und Links spring spring-boot spring-security-oauth2