Statt Sessions: Web-Authentifizierung mit JSON Web Tokens
Um eine Anmeldung im Web wiederzuerkennen, waren Sessions lange das Mittel der Wahl. Heute arbeiten Entwickler vermehrt mit JSON Web Tokens.
(Bild: Albert Hulm)
- Manuel Ottlik
Die Authentifizierung innerhalb von HTTP-Webanwendungen lösen Entwickler traditionell mit Sessions: Ein Benutzer meldet sich mit seinen Anmeldedaten an; stimmen diese mit Werten aus der Benutzerdatenbank überein, legt der Server eine Session mit Daten über den Benutzer an – einen Datensatz mit Informationen zur Benutzersitzung.
Den Datensatz speichert der Server zum Beispiel auf seiner Festplatte – in vielen Implementierungen als einfache Textdatei. Der Datensatz wird mit einer Session-ID verknüpft, eine zufällige und lange Zeichenkette. Diese ID bekommt der Client nach der Anmeldung als Cookie gesendet. Er speichert diese und sendet sie bei zukünftigen Anfragen an den Server quasi als Ausweis mit. So schafft man es, über das zustandslose Protokoll HTTP eine nicht-zustandslose Verbindung zwischen Client und Server herzustellen. Wenn der Client nun eine weitere Anfrage an den Server sendet, hängt er die Session-ID an. Dieses Verfahren hat lange gut funktioniert, stößt aber in modernen Webanwendungen, die auf viele Server verteilt sind, an seine (Performance-)Grenzen.
Die Session selbst wird nämlich auf genau einem Server gespeichert. Sobald mehrere Server redundant laufen, um etwa einen Lastenausgleich herstellen zu können und hohe Zugriffszahlen zu bewältigen, taucht ein Problem auf: Damit alle am Lastenausgleich beteiligten Server die hinterlegten Informationen zu einer Session-ID kennen, müsste man die Sessions aufwendig synchronisieren. Ein ähnliches Problem tritt auf, wenn der Nutzer per Single-Sign-On (SSO) mit einer Anmeldung mehrere Anwendungen nutzen soll. Jeder beteiligte Dienst bräuchte eine Kopie aller Sessions. Kommt es in einem Dienst zu einem Leck, wären alle anderen Dienste ebenfalls kompromittiert. Verteilte Systeme verlangen also nach einer Möglichkeit, Nutzer zu authentifizieren, ohne dass ein zentraler Session-Speicher als Flaschenhals im Wege steht.
Das war die Leseprobe unseres heise-Plus-Artikels "Statt Sessions: Web-Authentifizierung mit JSON Web Tokens ". Mit einem heise-Plus-Abo können Sie den ganzen Artikel lesen.