Spring Boot 1.3.3 @EnableResourceServer und @ EnableOAuth2Sso zur gleichen Zeit

9

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

zurück %Vor%

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:

%Vor%

Wie kann ich mein Ziel erreichen? Ich möchte Access Token und SSO gleichzeitig verwenden.

Danke ~

    
Fallflame 05.05.2016, 19:52
quelle

1 Antwort

4

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:

  • OAuth2Sso : Für Benutzer, die von einem Browser kommen, möchten wir sie zum Authentifizierungsanbieter für das Token
  • umleiten
  • ResourceServer : Normalerweise für API-Anfragen, die mit einem Token kommen, das sie von irgendwoher bekommen haben (höchstwahrscheinlich von demselben Authentifizierungsanbieter)

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%

%Vor%

Also, Request Matcher wird nicht für SsoSecurityConfiguration im obigen Beispiel benötigt. Aber gut zu wissen, die Gründe dafür:)

    
plajko 23.05.2017 06:51
quelle