Grundlagen

Authentifizierung

Wer bist du, und wie beweist du es? Wie Passwörter richtig gespeichert werden, was OAuth 2 und OpenID Connect eigentlich tun, was in einem JWT steht – und warum Passkeys das Phishing beenden könnten.

Lesestand

Authentifizierung klärt, wer jemand ist. Autorisierung klärt, was er darf. Nachweisen kann man sich durch etwas, das man weiß (Passwort), hat (Handy, Sicherheitsschlüssel) oder ist (Fingerabdruck). Zwei davon zusammen ergeben Mehr-Faktor-Authentifizierung.

Für Entwickler zählen vier Dinge: Passwörter nur mit einer absichtlich langsamen Hashfunktion speichern. Nach dem Login Sitzung oder Token sicher handhaben. Für „Anmelden mit …“ und API-Zugriffe OAuth 2 und OpenID Connect verstehen. Und Passkeys kennen – sie ersetzen Passwörter durch Schlüsselpaare und sind immun gegen Phishing.

Wer bist du?

🧠

Wissen

Passwort, PIN. Kann erraten, ausgespäht, weitergegeben oder auf einer gefälschten Seite eingegeben werden.

📱

Besitz

Handy mit Authenticator-App, Hardware-Schlüssel, Chipkarte. Ein Angreifer muss es physisch oder technisch in die Hand bekommen.

👆

Sein

Fingerabdruck, Gesicht. Meist entsperrt es nur lokal ein Gerät, auf dem der eigentliche Schlüssel liegt.

Nicht jede Zwei-Faktor-Lösung ist gleich gut. SMS-Codes lassen sich durch das Umleiten der Telefonnummer abfangen (SIM-Swapping). Einmalcodes aus einer App (TOTP: aus einem gemeinsamen Geheimnis und der Uhrzeit berechnet, alle 30 Sekunden neu) sind besser – aber ein Nutzer kann sie auf einer Phishing-Seite eintippen. Wirklich phishing-resistent sind nur Hardware-Schlüssel und Passkeys.

Passwörter speichern

Die Grundregel: Ein Server speichert nie das Passwort selbst, sondern einen Hash. Beim Login wird die Eingabe gehasht und verglichen. Aber welcher Hash? Was passiert, wenn die Datenbank gestohlen wird – und das passiert ständig – zeigt das Experiment:

Die gestohlene Benutzertabelle
Wie lange hält ein Passwort dieser Art?

Angreifer mit einer einzelnen Hochleistungs-Grafikkarte; Geschwindigkeiten als grobe Größenordnung. Durchschnittliche Zeit = halber Suchraum geteilt durch Versuche pro Sekunde.

Drei Lehren daraus:

  • Salt: Ein zufälliger Wert pro Nutzer, der mitgehasht und neben dem Hash gespeichert wird. Gleiche Passwörter ergeben dann verschiedene Hashes, und vorberechnete Tabellen werden nutzlos. Der Angreifer muss jedes Konto einzeln angreifen.
  • Langsam ist gut: SHA-256 ist für Geschwindigkeit gebaut – genau das Falsche für Passwörter. bcrypt, scrypt, PBKDF2 und Argon2id sind absichtlich teuer, mit einstellbarem Aufwand. Argon2id braucht zusätzlich viel Speicher pro Versuch, was Grafikkarten ausbremst. Für einen Nutzer ist ein Login von 100 Millisekunden unmerklich – für einen Angreifer ist es das Ende.
  • Länge schlägt Komplexität: Die aktuelle NIST-Empfehlung verlangt lange Passwörter statt Sonderzeichen-Regeln, verzichtet auf erzwungene regelmäßige Wechsel und prüft neue Passwörter gegen Listen bereits geleakter Passwörter.

Nach dem Login: Sitzung oder Token

HTTP ist zustandslos – der Server muss den Nutzer bei jeder Anfrage wiedererkennen. Zwei Wege:

Sitzung (Session)Token (z. B. JWT)
Was der Client hateine zufällige Sitzungs-ID im Cookieein signiertes Dokument mit Nutzer, Rechten und Ablaufzeit
Was der Server prüftschlägt die ID im Sitzungsspeicher nachprüft nur die Signatur – keine Datenbank nötig
Abmelden, sperrensofort: Eintrag löschenschwierig: Das Token bleibt bis zum Ablauf gültig
Gut fürklassische Web-AnwendungenAPIs, Microservices, mobile Apps

Weil Tokens nicht zurückgerufen werden können, gibt man ihnen eine kurze Laufzeit – Minuten – und dazu ein langlebiges Refresh-Token, mit dem der Client sich neue holt. Das Refresh-Token kann der Server sperren.

Was in einem JWT steht

Ein JSON Web Token besteht aus drei Base64-kodierten Teilen, getrennt durch Punkte: Kopf, Inhalt, Signatur. Der Inhalt ist nicht verschlüsselt – jeder kann ihn lesen. Geschützt ist er nur gegen Veränderung:

Ein JWT bauen und prüfen

Echte HMAC-SHA256-Signatur, live berechnet. Der Server kennt das Geheimnis „server-geheimnis“.

OAuth 2 und OpenID Connect

„Anmelden mit Google“, „Diese App möchte auf deinen Kalender zugreifen“ – dahinter steckt OAuth 2. Sein Zweck ist delegierter Zugriff: Eine Anwendung bekommt eingeschränkte Rechte, ohne je das Passwort zu sehen. Früher gab man Drittanbietern sein Passwort – und damit alles. OpenID Connect (OIDC) setzt darauf auf und liefert zusätzlich ein ID-Token, das sagt, wer sich angemeldet hat. Erst damit wird OAuth zum Login.

Authorization Code Flow mit PKCE

Wichtige Begriffe auf einen Blick: Der Scope legt fest, was die App darf – etwa nur Kalender lesen. Das Access-Token öffnet die API, das ID-Token sagt der App, wer der Nutzer ist, das Refresh-Token holt neue Access-Tokens. Bekannte Autorisierungsserver sind Keycloak, Microsoft Entra ID, Okta, Auth0 sowie Google und Apple für Endkunden.

Passkeys: Anmelden ohne Passwort

Passkeys (technisch: WebAuthn und FIDO2) ersetzen das Passwort durch ein Schlüsselpaar, wie in der Kryptografie beschrieben. Bei der Registrierung erzeugt das Gerät für genau diese Website ein Paar; der Server bekommt nur den öffentlichen Schlüssel. Beim Login schickt der Server eine Zufallszahl, das Gerät signiert sie mit dem privaten Schlüssel – freigegeben per Fingerabdruck, Gesicht oder PIN.

🎣

Phishing-sicher

Der Schlüssel ist an die Domain gebunden. Auf bank-login.example funktioniert der Passkey von bank.example schlicht nicht – kein Nutzer kann sich vertun.

🗄

Nichts zu stehlen

Der Server speichert nur öffentliche Schlüssel. Ein Datenbank-Leck verrät nichts, womit man sich anmelden könnte.

☁

Synchronisiert

Passkeys werden über den Passwortmanager von Apple, Google, Microsoft oder anderen auf die eigenen Geräte verteilt – ein verlorenes Handy heißt nicht mehr: Konto weg.

Für Entwickler übersetzt

// Passwörter: Spring Security
PasswordEncoder enc = PasswordEncoderFactories.createDelegatingPasswordEncoder();
String gespeichert = enc.encode("sommer2026");   // "{bcrypt}$2a$10$Xk9…" – Verfahren, Kosten, Salt, Hash
boolean ok = enc.matches(eingabe, gespeichert);

// API als OAuth-Resource-Server: Tokens prüft Spring anhand des Ausstellers
// application.yml:
//   spring.security.oauth2.resourceserver.jwt.issuer-uri: https://login.example.com/realms/shop

@GetMapping("/api/bestellungen")
@PreAuthorize("hasAuthority('SCOPE_bestellungen.lesen')")
List<Bestellung> meine(@AuthenticationPrincipal Jwt jwt) {
    return service.fuerKunde(jwt.getSubject());
}
RegelWarum
Nicht selbst bauenLogin, Passwort-Reset, Token-Prüfung sind voller Fallstricke. Spring Security und ein fertiger Autorisierungsserver wie Keycloak nehmen das ab.
Präfix im HashDer {bcrypt}-Präfix des DelegatingPasswordEncoder erlaubt, später auf ein stärkeres Verfahren umzusteigen: Alte Hashes funktionieren weiter und werden beim nächsten Login erneuert.
Token immer vollständig prüfenSignatur, Aussteller, Zielgruppe (aud), Ablaufzeit. Und nur die erwarteten Algorithmen akzeptieren – nie "alg": "none".
Tokens im BrowserNicht in localStorage – dort kann jedes eingeschleuste Skript sie lesen. Besser ein HttpOnly-Cookie oder ein Backend, das die Tokens für den Browser verwahrt.
Gleiche Fehlermeldung„Benutzer oder Passwort falsch“ – nie verraten, welches von beiden. Sonst lässt sich testen, welche Konten existieren.

Häufige Irrtümer

„Wir speichern die Passwörter verschlüsselt.“ – Dann kann sie jeder mit dem Schlüssel lesen. Richtig ist ein langsamer Hash mit Salt.
„Ein JWT ist verschlüsselt.“ – Es ist nur signiert. Den Inhalt kann jeder dekodieren. Persönliche Daten gehören nicht hinein.
„OAuth ist ein Login-Verfahren.“ – OAuth regelt Zugriffsrechte. Wer sich angemeldet hat, sagt erst OpenID Connect. Ein Access-Token als Login-Beweis zu benutzen, ist ein bekannter Fehler.
„Sonderzeichen-Regeln machen Passwörter sicher.“ – Sie führen zu „Sommer2026!“ – komplex aussehend, aber leicht zu erraten. Länge und echter Zufall zählen: Vier zufällig gewürfelte Wörter sind etwa so stark wie acht völlig zufällige Zeichen und viel leichter zu merken; fünf Wörter sind deutlich stärker.
„Nach dem Abmelden ist das Token ungültig.“ – Nur wenn der Server eine Sperrliste führt. Ein gestohlenes JWT funktioniert sonst bis zu seiner Ablaufzeit.

Verwandte Begriffe