PKCE: Sicherer OAuth-Login für Apps und Browser
Kurz: PKCE (gesprochen „Pixie”) schützt den OAuth-Code-Ablauf davor, dass jemand einen abgefangenen Code einlöst. Die Anwendung beweist beim Einlösen, dass sie dieselbe ist, die den Ablauf gestartet hat.
Das Problem
Im OAuth-Ablauf kommt der Anbieter mit einem kurzen Code zurück zur Anwendung. Apps und Browser-Anwendungen haben kein geheimes Passwort, das sie beim Einlösen vorzeigen könnten. Fängt ein Angreifer den Code ab (etwa über eine manipulierte Weiterleitung), könnte er ihn selbst einlösen.
So funktioniert PKCE
- Die Anwendung erzeugt einen zufälligen, langen Wert, den Code Verifier.
- Sie bildet daraus mit SHA-256 den Code Challenge und schickt nur diesen beim Start mit.
- Der Anbieter merkt sich die Challenge und gibt den Code zurück.
- Beim Einlösen sendet die Anwendung den Verifier. Der Anbieter rechnet nach, ob er zur Challenge passt.
Ein Angreifer, der nur den Code kennt, kennt den Verifier nicht. Aus der Challenge lässt sich der Verifier nicht zurückrechnen, weil ein Hash nur in eine Richtung geht (Hashing).
Wo es Pflicht oder Standard ist
Für öffentliche Clients (mobile Apps, Single-Page-Anwendungen) ist PKCE Pflicht. Auch für Server-Anwendungen gilt es inzwischen als Empfehlung, zusätzlich zu state und bei OpenID Connect (OIDC) zu nonce.
Typische Fehler
- Challenge-Methode
plainstattS256verwenden. - Den Verifier nicht zufällig genug erzeugen (zu kurz, vorhersagbar).
- Den Verifier irgendwo ablegen, wo andere Seiten ihn lesen können.