HTTP Basic Authentication ist eine der ältesten und einfachsten Methoden, eine Ressource per Passwort zu schützen: Der Browser fragt Benutzername und Passwort ab, und beide werden bei jeder Anfrage an den Server mitgeschickt. Genau diese Einfachheit ist auch die größte Schwäche.
Wie der Authorization-Header entsteht
Benutzername und Passwort werden mit einem Doppelpunkt verbunden (benutzer:passwort), anschließend wird die gesamte Zeichenkette Base64-kodiert und in den Header Authorization: Basic <kodierte_zeichenkette> eingesetzt. Der Browser sendet diesen Header nach der ersten erfolgreichen Anmeldung automatisch bei jeder weiteren Anfrage mit.
Warum Base64 keine Sicherheit bietet
Base64 ist ein Kodierungsschema, keine Verschlüsselung: Jeder kann die Zeichenkette innerhalb von Sekunden ohne jeglichen Schlüssel zurück in benutzer:passwort dekodieren. Wird die Anfrage abgefangen — etwa über ein ungesichertes öffentliches WLAN —, liegen die Zugangsdaten sofort offen.
Umlaute, ß und die Größe des Base64-Tokens
Base64 kodiert Bytes, nicht Zeichen — deshalb zählt die Kodierung der Ausgangszeichenkette. Ein Buchstabe ohne Umlaut belegt in UTF-8 nur 1 Byte, während ä, ö, ü und ß jeweils 2 Byte belegen. Ein Passwort wie Straße123 oder Müller&Söhne erzeugt dadurch ein spürbar längeres Base64-Token als ein rein ASCII-basiertes Passwort gleicher Zeichenzahl. Das ß bringt zusätzlich eine Eigenheit mit: Sein Großbuchstabe ẞ wurde erst 2017 offiziell in die deutsche Rechtschreibung aufgenommen, weshalb ältere Systeme beim Groß-/Kleinschreibungsvergleich von Benutzernamen mit ß inkonsistent reagieren können.
Wofür man das braucht
- Einen Staging-Server oder ein internes Tool während der Entwicklung schnell per Passwort schützen.
- Einen korrekten Authorization-Header bauen, um eine API manuell mit curl oder Postman zu testen.
- Verstehen, warum Basic Auth über einfaches HTTP als ernste Sicherheitslücke gilt.
Basic Auth kennt keinen eingebauten Logout
Der Browser speichert die Zugangsdaten zwischen und hängt den Authorization-Header automatisch an jede weitere Anfrage an denselben Origin an, bis der Tab geschlossen wird — das Protokoll sieht schlicht keinen Standard-"Abmelden"-Button vor. Um einen Nutzer zwangsweise auszuloggen, greifen Server zu Tricks: absichtlich ein 401 mit anderem realm-Wert zurückgeben oder darauf setzen, dass der Nutzer selbst alle Browser-Tabs schließt.