Ich habe einige Beiträge über "JWT vs Cookie" gelesen, aber sie haben mich nur verwirrter gemacht ...
Ich möchte eine Klarstellung , wenn Leute über "tokenbasierte Authentifizierung gegen Cookies" sprechen, beziehen sich Cookies hier lediglich auf Sitzungscookies ? Meines Wissens nach ist Cookie wie ein Medium . Es kann verwendet werden, um eine tokenbasierte Authentifizierung (speichern Sie etwas, das angemeldete Benutzer auf der Clientseite identifizieren kann ) oder eine sitzungsbasierte Authentifizierung (Speichern einer Konstante auf der Clientseite) zu implementieren das entspricht den Sitzungsinformationen auf der Serverseite )
Warum brauchen wir JSON-Web-Token ? Ich habe das Standard-Cookie verwendet, um die tokenbasierte Authentifizierung zu implementieren ( keine Sitzungs-ID, kein Server- oder Dateispeicher ):
Set-Cookie: user=innocent; preferred-color=azure
und der einzige Unterschied, den ich festgestellt habe, ist, dass JWT sowohl Nutzdaten als auch Signaturen enthält ... während Sie wählen können zwischen signiertem oder Klartext- Cookie für http-Header. Meiner Meinung nach ist signiertes cookie (cookie:'time=s%3A1464743488946.WvSJxbCspOG3aiGi4zCMMR9yBdvS%2B6Ob2f3OG6%2FYCJM'
) platzsparender. Der einzige Nachteil ist, dass der Client das Token nicht lesen kann, nur der Server ... aber ich denke, es ist in Ordnung, da genau wie die Behauptung in JWT optional ist, es für das Token nicht erforderlich ist sinnvoll sein
quelle
Überblick
Was Sie verlangen, ist der Unterschied zwischen Cookies und Inhaber-Token zum Senden von JSON-Web-Tokens (JWTs) vom Client an den Server.
Sowohl Cookies als auch Inhaber-Token senden Daten.
Ein Unterschied besteht darin, dass Cookies zum Senden und Speichern beliebiger Daten dienen, während Inhaber-Token speziell zum Senden von Autorisierungsdaten dienen.
Diese Daten werden häufig als JWT codiert.
Plätzchen
Ein Cookie ist ein Name-Wert-Paar, das in einem Webbrowser gespeichert ist und ein Ablaufdatum und eine zugehörige Domain hat.
Wir speichern Cookies in einem Webbrowser entweder mit JavaScript oder mit einem HTTP-Antwortheader.
Der Webbrowser sendet bei jeder Anfrage automatisch Cookies an die Domain des Cookies.
Inhaber-Token
Ein Inhaber-Token ist ein Wert, der in den
Authorization
Header einer HTTP-Anforderung aufgenommen wird. Es wird nicht automatisch irgendwo gespeichert, es hat kein Ablaufdatum und keine zugeordnete Domain. Es ist nur ein Wert. Wir speichern diesen Wert manuell in unseren Clients und fügen diesen Wert manuell dem HTTP-Autorisierungsheader hinzu.JWT- und Token-basierte Authentifizierung
Wenn wir eine tokenbasierte Authentifizierung wie OpenID, OAuth oder OpenID Connect durchführen, erhalten wir von einer vertrauenswürdigen Stelle ein access_token (und manchmal auch ein id_token). Normalerweise möchten wir es speichern und zusammen mit HTTP-Anfragen für geschützte Ressourcen senden. Wie machen wir das?
Option 1 besteht darin, die Token in einem Cookie zu speichern. Dies übernimmt die Speicherung und sendet die Token im
Cookie
Header jeder Anforderung automatisch an den Server . Der Server analysiert dann das Cookie, überprüft die Token und antwortet entsprechend.Eine andere Möglichkeit besteht darin, das Token im lokalen / Sitzungsspeicher zu speichern und dann den
Authorization
Header jeder Anforderung manuell festzulegen. In diesem Fall liest der Server den Header und fährt wie bei einem Cookie fort.Es lohnt sich, die verknüpften RFCs zu lesen, um mehr zu erfahren.
quelle
Zusätzlich zu dem, was MvdD über das automatische Senden von Cookies gesagt hat:
Zusammenfassend: In den Posts, die Sie lesen, wird JWT wahrscheinlich als Inhaber-Token mit dem Authentifizierungs-Cookie für die Browser-Server-Authentifizierung verglichen. JWT kann jedoch noch viel mehr. Es bietet Standardisierung und Funktionen für die Verwendung außerhalb des Anwendungsfalls, an den Sie wahrscheinlich denken.
quelle
Cookies können das Risiko von CSRF-Angriffen erhöhen, da sie automatisch zusammen mit Anforderungen gesendet werden . Sie können jedoch das Risiko von XSS-Angriffen verringern, wenn das
HttpOnly
Flag gesetzt ist, da Skripte, die in die Seite eingefügt werden, nicht lesen können der Keks.CSRF: Ein Benutzer klickt auf einen Link (oder zeigt Bilder an) auf der Website eines Angreifers, wodurch der Browser eine Anfrage an die Website des Opfers sendet. Wenn das Opfer Cookies verwendet, nimmt der Browser das Cookie automatisch in die Anforderung auf. Wenn die GET-Anforderung nicht schreibgeschützte Aktionen auslösen kann, ist die Website des Opfers für den Angriff anfällig.
XSS: Ein Angreifer bettet ein Skript in die Opfer-Site ein (die Opfer-Site ist nur anfällig, wenn Eingaben nicht korrekt bereinigt werden), und das Skript des Angreifers kann alles tun, was Javascript auf der Seite tun darf. Wenn Sie JWT-Token im lokalen Speicher speichern, kann das Skript des Angreifers diese Token lesen und diese Token auch an einen von ihnen kontrollierten Server senden. Wenn Sie Cookies mit dem
HttpOnly
Flag verwenden, kann das Skript des Angreifers Ihr Cookie zunächst nicht lesen. Das Skript, das sie erfolgreich injiziert haben, kann jedoch weiterhin alles tun, was Javascript kann. Sie sind also immer noch IMO abgespritzt (dh sie können das Cookie möglicherweise nicht lesen, um es zur späteren Verwendung an ihren eigenen Server zu senden sie können XHR - Anfragen an den vicitim Ihre Nutzung der Webseite senden , die das Cookie enthalten wird sowieso).quelle
Ref - Bedarf an JSON-Web-Token
Kekse
Bei Cookies erstellt der Google Mail-Server nach der Authentifizierung des Benutzers eine eindeutige Sitzungs-ID. Entsprechend dieser Sitzungs-ID werden alle Benutzerinformationen im Speicher gespeichert, die der Google Mail-Server benötigt, um den Benutzer zu erkennen und Vorgänge auszuführen.Auch dann wird für alle nachfolgenden Anfragen und Antworten diese Sitzungs-ID übergeben. Wenn der Server nun eine Anfrage erhält, überprüft er die Sitzungs-ID. Wenn Sie diese Sitzungs-ID verwenden, wird überprüft, ob entsprechende Informationen vorhanden sind. Anschließend kann der Benutzer auf die Ressource zugreifen und die Antwort zusammen mit der Sitzungs-ID zurückgeben.
Nachteile von Cookies
JWT
quelle