PKCE code_verifier und code_challenge erzeugen

code_verifier erzeugen oder einfügen und die S256-code_challenge für OAuth 2.0 PKCE (RFC 7636) erhalten.

code_challenge (S256)

Läuft vollständig in deinem Browser. Eingaben werden weder gesendet noch gespeichert.

So funktioniert es

  1. Auf Erzeugen klicken oder einen code_verifier einfügen.
  2. Die code_challenge wird als BASE64URL(SHA-256(code_verifier)) berechnet.
  3. code_challenge und code_challenge_method=S256 in der Autorisierungsanfrage senden.
  4. Den code_verifier in der Token-Anfrage senden.

PKCE (Proof Key for Code Exchange, RFC 7636) schützt den Authorization-Code-Flow von OAuth 2.0. Es wurde für öffentliche Clients entwickelt, etwa Mobil-Apps, Desktop-Apps und Single-Page-Apps, die kein Client-Secret sicher aufbewahren können. Vor der Weiterleitung erzeugt der Client ein Einmal-Geheimnis, den code_verifier, und sendet nur dessen Hash, die code_challenge. Beim Eintausch des Codes gegen Tokens schickt er den ursprünglichen Verifier mit, und der Server prüft, ob beide zusammenpassen. Wer nur den Code abfängt, kann damit nichts anfangen.

Der Generator holt 32 Zufallsbytes über crypto.getRandomValues des Browsers und kodiert sie als base64url ohne Padding – das ergibt einen Verifier mit 43 Zeichen. Die code_challenge ist der SHA-256-Wert des Verifiers, ebenfalls base64url ohne Padding, und immer 43 Zeichen lang. Angeboten wird nur S256: RFC 7636 kennt auch plain, verlangt aber S256, sobald der Client SHA-256 berechnen kann. Nützlich zum Debuggen einer Login-Integration, zum Abgleich mit der Ausgabe Ihrer Bibliothek oder zum Bauen von Testanfragen.

Ein eingefügter Verifier wird unverändert gehasht und nicht auf die RFC-Regeln geprüft. Achten Sie selbst auf 43 bis 128 Zeichen aus A–Z, a–z, 0–9, „-“, „.“, „_“ und „~“. Erzeugen Sie für jede Autorisierungsanfrage einen neuen Verifier. Beide Werte werden auf dieser Seite mit der Web Crypto API berechnet und nirgendwohin gesendet.

Häufige Fragen

Was ist PKCE?

Proof Key for Code Exchange (RFC 7636). Der Client sendet bei der Autorisierung eine gehashte code_challenge und beim Token-Abruf den ursprünglichen code_verifier, sodass ein gestohlener Autorisierungscode allein nicht reicht.

Wie wird die code_challenge berechnet?

Bei S256: SHA-256 des code_verifier (ASCII), dann base64url ohne Padding. Für das RFC-7636-Beispiel dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk ergibt sich E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM.

Warum hat der erzeugte Verifier 43 Zeichen?

32 Zufallsbytes als base64url ohne Padding sind 43 Zeichen, die Mindestlänge laut RFC 7636 (43 bis 128 Zeichen aus A-Z, a-z, 0-9, -, ., _, ~).

Ähnliche Tools