Gerador de PKCE code_verifier e code_challenge

Gere ou cole um code_verifier e obtenha o code_challenge S256 para OAuth 2.0 PKCE (RFC 7636).

code_challenge (S256)

Roda inteiramente no seu navegador. Nada do que você digita é enviado ou armazenado.

Como usar

  1. Clique em Gerar para um novo code_verifier ou cole o seu.
  2. O code_challenge é calculado como BASE64URL(SHA-256(code_verifier)).
  3. Envie code_challenge e code_challenge_method=S256 na requisição de autorização.
  4. Envie o code_verifier na requisição de token.

PKCE (Proof Key for Code Exchange, RFC 7636) protege o fluxo de código de autorização do OAuth 2.0. Foi criado para clientes públicos, como apps móveis, apps desktop e aplicações de página única, que não conseguem guardar um segredo de cliente. Antes de redirecionar o usuário, o cliente cria um segredo de uso único, o code_verifier, e envia apenas o hash dele, o code_challenge. Na troca do código por tokens, envia o verifier original e o servidor confere se os dois batem; quem interceptar só o código não consegue usá-lo.

Este gerador pega 32 bytes aleatórios de crypto.getRandomValues do navegador e os codifica em base64url sem preenchimento, o que resulta em um verifier de 43 caracteres. O code_challenge é o SHA-256 do verifier, também em base64url sem preenchimento, e tem sempre 43 caracteres. Só o método S256 é oferecido: a RFC 7636 também define plain, mas exige S256 quando o cliente consegue calcular SHA-256. Use para depurar uma integração de login, comparar a saída da sua biblioteca ou montar requisições de teste à mão.

Um verifier colado é processado como está, sem validação de formato: confira se ele tem de 43 a 128 caracteres entre A–Z, a–z, 0–9, “-”, “.”, “_” e “~”. Gere um verifier novo para cada requisição de autorização. Os dois valores são calculados nesta página com a Web Crypto API e não são enviados a lugar nenhum.

Perguntas frequentes

O que é PKCE?

Proof Key for Code Exchange (RFC 7636). O cliente envia um code_challenge com hash na autorização e o code_verifier original ao pedir o token, então um código roubado não basta sozinho.

Como o code_challenge é calculado?

Com S256: SHA-256 do code_verifier em ASCII, codificado em base64url sem preenchimento. Para o exemplo da RFC 7636 dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk o resultado é E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM.

Por que o verifier gerado tem 43 caracteres?

32 bytes aleatórios em base64url sem preenchimento dão 43 caracteres, o mínimo permitido pela RFC 7636 (43 a 128 caracteres de A-Z, a-z, 0-9, -, ., _, ~).

Ferramentas relacionadas