WebAuthn und JWTs werden oft so verglichen, als ob sie dasselbe Problem lösen. Das tun sie nicht. WebAuthn befasst sich damit, wie ein Benutzer seine Identität nachweist. JWTs sind eine Möglichkeit, wie ein Server den authentifizierten Zustand darstellt, nachdem dieser Nachweis erfolgreich ist.
Diese Unterscheidung ist wichtig, da sie das Architekturgespräch völlig verändert.
Wo WebAuthn passt
WebAuthn bietet origin-bindende, phishing-resistente, öffentliche Schlüssel-basierte Authentifizierung. Ein Browserfluss kann so beginnen:
const credential = await navigator.credentials.get({
publicKey: optionsFromServer,
});
Der wichtige Punkt ist nicht der API-Aufruf. Es ist die Sicherheits-Property: das Credential ist an die Herkunft gebunden und wird durch öffentlich-key-Kryptografie unterstützt.
Wo JWTs passen
Nachdem die Authentifizierung erfolgreich war, muss der Server weiterhin ein Sitzungsmodell aufrechterhalten. Das könnte sein:
- ein HttpOnly-Cookie
- ein JWT
- eine undurchsichtige Sitzungs-ID
JWTs betreffen den Sitzungsverkehr und die Darstellung von Ansprüchen. Sie machen die Authentifizierung nicht von sich aus phishing-resistent.
Das bedeutet, eine starke Architektur kann so aussehen: WebAuthn zur Benutzerverifizierung, dann ein HttpOnly-Cookie oder ein anderer Sitzungstoken für den fortlaufenden Zustand. Diese Schichten arbeiten zusammen. Sie stehen nicht in Konkurrenz.
Bessere Regel
Verwenden Sie WebAuthn, um die Anmeldezeremonie zu verbessern. Wählen Sie JWTs, Cookies oder undurchsichtige Sitzungen abhängig davon, wie der Rest der Plattform mit Zustand, Widerruf und Browsersicherheit umgeht.
WebAuthn kann das System stärken, unabhängig davon, welches Sitzungstokenformat als nächstes kommt.
Weitere Lektüre