Welcome to Our Website

JSON Web Token (JWT):

JSON Web Token ist ein Standard zum Erstellen von Zugriffstoken für eine Anwendung.

Es funktioniert so: Der Server generiert ein Token, das die Benutzeridentität bestätigt, und sendet es an den Client.

Der Client sendet das Token für jede nachfolgende Anforderung an den Server zurück, sodass der Server weiß, dass die Anforderung von einer bestimmten Identität stammt.

Diese Architektur erweist sich in modernen Web-Apps als sehr effektiv, bei denen wir nach der Authentifizierung des Benutzers API-Anforderungen entweder an eine REST-oder eine GraphQL-API ausführen.

Wer benutzt JWT?, Google, zum Beispiel. Wenn Sie die Google APIs verwenden, verwenden Sie JWT.

Ein JWT ist kryptografisch signiert (aber nicht verschlüsselt, daher ist die Verwendung von HTTPS beim Speichern von Benutzerdaten im JWT obligatorisch), sodass wir ihm vertrauen können, wenn wir es erhalten Kein Zwischenhändler kann es abfangen und ändern, oder die Daten, die es enthält, ohne es ungültig zu machen.

JWTs werden jedoch häufig wegen ihrer Übernutzung kritisiert, insbesondere weil sie verwendet werden, wenn weniger problematische Lösungen verwendet werden können.

Sie müssen sich zu diesem Thema eine Meinung bilden., Ich plädiere nicht für eine Technologie gegenüber einer anderen, sondern präsentiere nur alle Möglichkeiten und Werkzeuge, die Ihnen zur Verfügung stehen.

Wofür sind sie gut? Hauptsächlich API-Authentifizierung und Server-zu-Server-Autorisierung.

Wie wird ein JWT-token generiert?

Mit Knoten.,js Sie können den ersten Teil des Tokens mit diesem Code generieren:

const header = { "alg": "HS256", "typ": "JWT" }const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64')

Wir setzen den Signaturalgorithmus auf HMAC SHA256 (JWT unterstützt mehrere Algorithmen), dann erstellen wir einen Puffer aus diesem JSON-codierten Objekt und codieren es mit base64.

Das partielle Ergebnis ist eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.

Als nächstes fügen wir die Nutzlast hinzu, die wir mit jeder Art von Daten anpassen können., Es gibt reservierte Schlüssel, einschließlich iss und exp, die den Aussteller und die Ablaufzeit des Tokens identifizieren.

Sie können dem Token Ihre eigenen Daten hinzufügen, indem Sie ein Objekt verwenden:


Wir konvertieren dieses Objekt, JSON-codiert, in einen Puffer und codieren das Ergebnis mit base64, genau wie zuvor:

div>const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64')

In diesem Fall ist das Teilergebnis eyJ1c2VybmFtZSI6IkZsYXZpbyJ9.,

Als nächstes erhalten wir eine Signatur aus dem Header-und Payload-Inhalt, die sicherstellt, dass unser Inhalt nicht geändert werden kann, selbst wenn er abgefangen wird, da unsere Signatur ungültig wird. Dazu verwenden wir das Knotenmodul crypto:

Wir verwenden den geheimen Schlüssel secretKey und erstellen eine base64-codierte Darstellung der verschlüsselten Signatur.,

Der Wert der Signatur ist in unserem Fall

Wir sind fast fertig, wir müssen nur die 3 Teile von Header, payload und Signatur verketten, indem wir sie mit einem Punkt trennen:

const jwt = `${encodedHeader}.${encodedPayload}.${signature}`

API-Authentifizierung

Dies ist wahrscheinlich die einzig vernünftige Möglichkeit, JWT zu verwenden.

Ein häufiges Szenario ist: Sie melden sich für einen Dienst an und laden ein JWT aus dem Service-Dashboard herunter. Dies ist, was Sie von nun an verwenden, um alle Ihre Anfragen an den Server zu authentifizieren.,

Ein weiterer Anwendungsfall, der das Gegenteil ist, ist das Senden des JWT, wenn Sie die API verwalten und Clients eine Verbindung zu Ihnen herstellen, und Sie möchten, dass Ihre Benutzer nachfolgende Anforderungen senden, indem Sie nur das Token übergeben.

In diesem Fall muss der Client das Token irgendwo speichern. Wo ist der beste Ort? In einem HttpOnly-cookie. Die anderen Methoden sind alle anfällig für XSS-Angriffe und sollten daher vermieden werden. Auf ein HttpOnly-Cookie kann über JavaScript nicht zugegriffen werden und wird bei jeder Anforderung automatisch an den Ursprungsserver gesendet, sodass es perfekt zum Anwendungsfall passt.,

Wählen Sie die beste JWT-Bibliothek

Abhängig von der verwendeten Sprache und Umgebung können Sie aus einer Reihe von Bibliotheken auswählen. Die beliebtesten sind in der jwt.io website.

Verwenden Sie keine JWTs als Sitzungstoken

Sie sollten keine JWTs für Sitzungen verwenden. Verwenden Sie einen regulären serverseitigen Sitzungsmechanismus, da dieser viel effizienter und weniger anfällig für Datenexposition ist.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.