JWT & OAuth2 - Speichert der Server das Token? Und wie sind sie sicher / Hacker sicher?

10

Ich bin ein absoluter Neuling, wenn es um Sicherheit, Authentifizierungsstrategien geht. Also habe ich diesen Artikel über "Token Based Authentication" gelesen: Ссылка

Ich habe 2 Fragen:

  1. Ich verstehe nicht, warum ein Mittelsmann (oder ein Hacker) nicht in der Lage wäre, das vom Client gesendete Token zu sehen und dasselbe zu verwenden, um sich als Client / Person auszugeben, um Ressourcen abzurufen. Was macht JSON-Web-Token / OAuth2-basierte Authentifizierungen in diesem Sinne sicherer? Wenn wir jedes Mal ein Einmal-Token verwenden, würde ich verstehen, dass der Hacker das Token nicht lesen kann, auch wenn er es für eine andere Anfrage benutzen kann. Aber wie ist das eine sicherere Authentifizierungsstrategie?

  2. Wie bleibt das Token bis zum Ablauf der Token unverändert?
  3. Wie weiß der Server, dass das vom Client gesendete Token gültig ist, d. h. etwas, das der Server während der Anmeldung mit dem Client ausgetauscht hat. Speichert der Server das Token, das in einer Datenbank oder irgendwo erzeugt wurde, und aktualisiert den "zuletzt aufgerufenen Zeitstempel" oder etwas und entfernt weiterhin die Token, wobei last_accessed_time & gt; Vor 1 Stunde, um es nach 1 Stunde Inaktivität zu beenden?

user1102532 26.07.2016, 17:56
quelle

2 Antworten

17
  

Ich verstehe nicht, warum ein Mittelsmann (oder ein Hacker) nicht in der Lage wäre, das vom Client gesendete Token zu sehen und dasselbe zu verwenden, um sich als Client / Person auszugeben, um Ressourcen abzurufen?

JWT schützt dich nicht vor einem MITM-Angriff (Man-in-the-Middle). Wenn ein Angreifer ein gültiges Token erhält, kann er sich imitieren. Auch wenn der Inhalt verschlüsselt ist.

JWT sollte mit einer SSL / TLS-Verbindung verwendet werden, um MITM zu vermeiden

  

Was macht JSON-Web-Tokens / OAuth2-basierte Authentifizierungen in diesem Sinne sicherer?

JWT ist ein Token-Format und oauth2 ist ein Protokoll. oauth2 kann jwt verwenden. Oauth2 ist sicherer für den Benutzer, der eine Website eines Drittanbieters verwendet, da Anmeldeinformationen nur vom Benutzer an die Hauptsite gesendet werden. Anschließend gibt die Site ein Token aus, das von der Website des Drittanbieters zur Authentifizierung des Benutzers verwendet werden kann. Die Website des Drittanbieters zeigt die Benutzeranmeldeinformationen nicht an

  

Aber wie läuft das Token so lange ab, bis es abläuft, wie ist das eine sicherere Authentifizierungsstrategie?

Lesen Sie weiter. Sie müssen Ihre Tokens schützen, damit sie nicht gestohlen werden: Verwenden Sie hauptsächlich HTTPS oder mindern Sie deren Auswirkungen: Speichern Sie Cookies mit HttpOnly (wenn Sie nicht auf JWT-Inhalt auf der Client-Seite zugreifen müssen), setzen Sie die Ablaufzeit kurz, drehen Sie Token ...

  

Wie weiß der Server, dass das vom Client gesendete Token gültig ist, d. h. etwas, das der Server während der Anmeldung mit dem Client ausgetauscht hat.

Der dritte Teil eines JWT wie hhhh.pppp.ssss ist die Signatur. Die Signatur wird mit dem privaten Schlüssel des Servers über den Header und die Nutzlast (hhhh.pppp) ausgeführt, und schützt den Inhalt. Wenn ein Angreifer den Inhalt oder die Signatur ändert, erkennt der Server, dass die Signatur überprüft wird, und lehnt die Authentifizierung ab.

  

Speichert der Server das Token, das in einer Datenbank oder irgendwo generiert wurde, und aktualisiert den "zuletzt aufgerufenen Zeitstempel" oder etwas und entfernt weiterhin die Token, wobei last_accessed_time & gt; Vor 1 Stunde, um es nach 1 Stunde der Inaktivität zu beenden?

Es wird nicht benötigt. Die Signatur wird im Token selbst gepackt ( ssss ), daher wird gesagt, dass JWT in sich abgeschlossen ist

Der Server verfügt über einen kryptographischen geheimen Schlüssel oder ein Schlüsselpaar, public und privete. Das Token wird mit dem geheimen Schlüssel (für HMAC-symmetrische Schlüssel) signiert und verifiziert oder mit dem privaten Schlüssel signiert und mit dem entsprechenden öffentlichen Schlüssel verifiziert (für asymmetrische RSA-Schlüssel)

    
pedrofb 26.07.2016, 19:31
quelle
1

Es geht darum, das Token zu signieren. Verschlüsselung des Tokens nicht. Der Server überprüft nur die Signatur. JWT ist nicht verschlüsselt (es sei denn, Sie implementieren es). Speichern Sie keine sensiblen Daten im Token, da diese standardmäßig nicht verschlüsselt sind.

    
Amir Sasson 26.07.2016 17:59
quelle