Bekommen wichtigste in den Frühling Starten resource-server von JWT token
Habe ich eine eigene auth-server und einem resource-server - sowohl Spring-Boot-Anwendungen. Ich bin mit OAuth2 mit JWT Token für die Authentifizierung und Autorisierung.
Bekomme ich ein token durch den Zugriff auf den auth server:
curl -X POST --user 'client:secret' -d 'grant_type=password&username=john&password=123' http://localhost:9000/auth-server/oauth/token
und verwenden Sie es, Wann immer eine Ressource aus dem Ressourcen-server (auf anderen server), indem Sie das token, um den request-header.
Was unklar ist mir jedoch, festzustellen, welcher Benutzer angemeldet ist in der Ressource server.
In der auth server, ich kann so etwas tun:
@RequestMapping("/user")
public Principal user(Principal user) {
return user;
}
und dieser Endpunkt wird mir der aktuelle Benutzer auf der Grundlage der token verwendet. Wenn ich versuche, das gleiche zu tun, in der Ressource server allerdings bekomme ich nur leere Antwort.
Brauche ich, um die id des authentifizierten Benutzers irgendwie in der Ressource server entscheiden, ob ich zurückgeben soll, einige Daten zu ihm (ich habe einige Ressourcen, auf die zugegriffen werden kann, die nur von Ihrem Besitzer).
Wie konnte ich das tun? Ich dachte, dass durch die Verwendung von JWT, brauche ich nicht zu teilen die gleichen token zu speichern.
Kann ich code-Beispiele, wenn meine Frage nicht klar.. ich bin gerade auf der Suche nach einer Bestätigung, dass meine Vermutung korrekt ist, und dieses Verhalten kann erreicht werden - dies ist meine erste Zeit mit dem Experimentieren mit spring security.
Den Ressourcen-server verknüpft ist, um die auth-server in der Anwendung.Eigenschaften:
security.oauth2.resource.userInfoUri: http://localhost:9000/auth-server/user
- haben Sie, durch Zufall, Holen Sie dies gelöst? Ich habe diese arbeiten durch die Verwendung InMemoryTokenStore() anstelle von JwtTokenStore(). Dennoch würde ich gerne erreichen das gleiche mit JwtTokenStore().
- Leider Nein. Die Art und Weise, die ich benutze es jetzt ist denselben Benutzernamen in der auth-server und resource-server und zum abrufen der Benutzer mit diesem Benutzernamen, die übergeben wird, in der Hauptsache...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte, schlage ich einen anderen Weg?
Müssen Sie implementieren Ihre eigenen token-generation, und wickeln Sie Sie in den token-Benutzer-Daten. Sie müssen es setzen notwendige Informationen für den Benutzer in Ansprüche Objekt. Und dann auf Ressourcen-server packen Sie es zurück.
Sind wir mit io.jsonwebtoken Bibliothek.
Ihre Ressource-server nicht auto-magisch den AUFTRAGGEBER von der auth-service. Sie müssen gebunden werden. Einsetzen der auth-token in den header der richtige Ansatz. Aber, die Ressourcen-server, müssen Sie auf "bestätigen" das auth-token. Das einmal überprüfen Sie die auth-token mit dem auth server den AUFTRAGGEBER zurückgegeben werden.
So, Ihre Ressourcen-server braucht, um die "/user" auf Ihren auth-server.
Hier ist ein Beispiel. http://technicalrex.com/2015/02/20/stateless-authentication-with-spring-security-and-jwt
Dies ist, was ich getan habe, für alle, die Stoppeln, die über diese (diese Methode verwendet JWKs zu überprüfen JWTs).
Müssen Sie zuerst die setup-config bean, erstreckt sich das WebSecurityConfigurerAdapter.class. Innerhalb der HttpSecurity Objekt, können Sie mit der oauth2ResourceServer.jet () - Methode, die ist ziemlich nett. Er sieht für JWTs für eingehende Anfragen und stellen die Wichtigsten Objekte (und andere Objekte) auf eingehende Anfragen. Es sollte in etwa so Aussehen:
In der Anwendung.yml/.Eigenschaften, die Sie benötigen, um auf die JWK Endpunkt:
In Ihrem controller, können Sie die Wichtigsten und Authentifizierung.
Alternativ können Sie analysieren die JWT (da an dieser Stelle die BearerTokenAuthenticationFilter wird validiert haben JWT - in Bezug auf Ablauf und andere Dinge) für das Lesen der Ansprüche. Dies funktioniert nur, wenn Sie Forderungen haben, die Sie sind komfortabel mit.