Spring-Boot-JWT-Abmeldung

8

Ich benutze diesen Code Ссылка und alles funktioniert perfekt, aber ich weiß nicht wie um die Abmeldefunktionalität zu implementieren. Kann mir jemand Rat geben? Danke.

    
Martin Morek 26.12.2015, 22:42
quelle

2 Antworten

6

Die clientseitige Abmeldung ist einfach, verwerfen Sie einfach das Token, das Sie besitzen. Um eine serverseitige Abmeldefunktion bereitzustellen, muss Ihre Anwendung auf aktuell authentifizierte Clients, dh vorhandene Tokens, achten. Das "build-in" -Problem bei der tokenbasierten Authentifizierung besteht darin, dass ein veröffentlichtes Token solange gültig ist, bis es abläuft und es keine "remote invalidation" -Lösung gibt. Ihre einzige Chance besteht darin, den Zugriff auf Anfragen mit einem Token zu vermeiden, dem Sie nicht mehr vertrauen.

Sie müssen sich also jedes veröffentlichte Token in einem Container mit dem Namen Token-Speicher .

Es gibt einige Implementierungen der TokenStore Schnittstelle, um im Arbeitsspeicher oder vielleicht mit einer Datenbank ( JdbcTokenStore ) zu arbeiten. Für ein einfaches Beispiel ist InMemoryTokenStore völlig ausreichend.

Um es zu verwenden, muss ein Token-Speicher wie folgt erstellt und konfiguriert werden:

Fügen Sie dies Ihrem AuthorizationServerConfiguration hinzu:

%Vor%

Und benutze es in AuthorizationServerEndpointsConfigurer :

%Vor%

Fügen Sie es auch Ihrem ResourceServerConfiguration hinzu:

%Vor%

Das ist fast alles. Jetzt können Sie Ihre Logout-Funktionalität so implementieren, wie Sie sie benötigen, vielleicht mit einem speziellen Endpunkt, wo Sie nur die Token erhalten und sie mit:

aus dem Token-Speicher entfernen müssen %Vor%

Achten Sie darauf, auch das Aktualisierungstoken zu entfernen, andernfalls (wenn nur das Zugriffstoken entfernt wird), kann der Client einen neuen mit dem Aktualisierungstoken erhalten.

Hier ist ein Testfall entsprechend Ihren Tests, um zu überprüfen, ob es funktioniert:

%Vor%

Und zumindest eine Empfehlung mit MockMvc ist ein großartiges Test-Framework, das das Testen von Ruheaufrufen erleichtert und Sie bei der Arbeit mit dem RestTemplate die Hindernisse und den Kachelcode beseitigen können. Vielleicht möchtest du es versuchen.

    
Kevin Peters 20.03.2017 15:19
quelle
0

Da sobald die Abmeldung abgeschlossen ist, beide Zugriffstoken & amp; Refresh-Token wird aus dem zugrunde liegenden Speicher auf dem Auth-Server entfernt. Wir müssen uns nur über die Ungültigkeit des Zugriffstokens auf Ressourcenservern Gedanken machen, bis diese abläuft

Um dies zu erreichen, müssen Sie ein Ereignis von auth-server veröffentlichen, sobald die Abmeldung über Spring Stream / Integration & amp; Veranlassen Sie, dass alle Token-Zielgruppeninstanzen das Logout-Ereignis abonnieren

Sie können Ihr eigenes LogoutHandler hinzufügen, das dieses Ereignis vom Authentifizierungsserver veröffentlicht. @StreamListner von Spring cloud stream kann verwendet werden, um auf jedem der Ressourcenserver auf diese Ereignisse zu warten

Dieses Abmeldeereignis muss den entfernten Zugriffstoken & amp; die verbleibende Zeit bis zum Ablauf. Alle Empfänger dieses Ereignisses müssen diese Zugriffstoken im Speicher auf einer Blacklist & amp; stellen Sie sicher, dass sie den Zugriff auf eine Ressource ablehnen, wenn das empfangene Zugriffstoken mit vorhandenen Token mit der schwarzen Liste übereinstimmt. Nachdem das Zugriffstoken abgelaufen ist, entfernen Sie es einfach aus dem Speicher. Um Schlüssel automatisch ablaufen zu lassen, können Sie etwas wie CacheBuilder von guava

verwenden

Also, im Allgemeinen, AFAIK, gibt es keine gebrauchsfertige Lösung für den Ablauf des Zugriffstokens aufgrund der Natur von JWT

    
Ashok Koyi 03.04.2018 15:05
quelle