Testar um fluxo OAuth manualmente
Construa um URL de autorização para Google, Microsoft Entra ID, Okta ou Keycloak, inicie sessão no navegador e troque depois o código com curl, enviando o code_verifier gerado.
Crie um code_verifier aleatório de 43 a 128 caracteres e o respetivo code_challenge S256 (RFC 7636), ou calcule o challenge de um verifier existente, com um state aleatório e os parâmetros a acrescentar ao pedido de autorização.
Deixe vazio para gerar um, ou cole um verifier existente para calcular o seu challenge.
A guardar no cliente e a enviar na troca do código por um token.
Base64URL do SHA-256 do verifier, enviado no pedido de autorização.
Valor aleatório a verificar no regresso para bloquear ataques CSRF.
O gerador OAuth PKCE produz o par code_verifier / code_challenge exigido pelo fluxo Authorization Code com PKCE, juntamente com um parâmetro state. Destina-se a programadores que integram um início de sessão OAuth 2.0 ou OpenID Connect numa SPA, numa aplicação móvel ou numa ferramenta de linha de comandos, e a quem testa o fluxo manualmente com curl ou Postman.
O PKCE (Proof Key for Code Exchange, RFC 7636) protege o código de autorização contra a interceção. O cliente cria um code_verifier secreto de 43 a 128 caracteres do conjunto não reservado A–Z, a–z, 0–9, «-», «.», «_» e «~»; a ferramenta gera 64 por predefinição com crypto.getRandomValues. Calcula depois code_challenge = BASE64URL(SHA-256(code_verifier)), sem preenchimento. Com o exemplo do anexo B da RFC, o verifier dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk dá o challenge E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM.
O challenge segue no pedido de autorização com code_challenge_method=S256 e um state aleatório; o verifier fica no cliente. Ao trocar o código por um token, o cliente envia code_verifier para o endpoint token e o servidor recalcula o SHA-256 para confirmar que corresponde ao challenge recebido. Um atacante que intercete o código não o consegue trocar sem o verifier. A ferramenta apresenta os parâmetros code_challenge, code_challenge_method e state a acrescentar ao URL de autorização e pode também recalcular o challenge de um verifier colado, para verificar a sua própria implementação.
Escolha um comprimento de 43 a 128 caracteres (64 por predefinição) para gerar um code_verifier, ou cole um verifier existente para calcular o respetivo challenge.
Copie o code_challenge S256 e o state aleatório, verificando o comprimento apresentado do verifier e do challenge (43 caracteres para um SHA-256).
Acrescente code_challenge, code_challenge_method=S256 e state ao URL de autorização e guarde o verifier para o enviar na troca do código.
Construa um URL de autorização para Google, Microsoft Entra ID, Okta ou Keycloak, inicie sessão no navegador e troque depois o código com curl, enviando o code_verifier gerado.
O seu servidor devolve «PKCE verification failed»: cole o verifier usado pela sua aplicação para confirmar que o challenge enviado é de facto o SHA-256 em Base64URL, sem = nem os caracteres + e /.
Gere um par verifier / challenge e um state para preencher manualmente um cliente HTTP que não trata o PKCE automaticamente.
O PKCE (RFC 7636) é uma extensão do fluxo Authorization Code: ao trocar o código, o cliente prova que foi ele quem iniciou o pedido. Envia primeiro um code_challenge derivado de um segredo e depois o próprio segredo (code_verifier). Um código intercetado é inútil sem esse segredo.
Entre 43 e 128 caracteres, apenas entre A–Z, a–z, 0–9 e «- . _ ~». A RFC 7636 recomenda gerá-lo a partir de pelo menos 32 bytes aleatórios, o que dá 43 caracteres em Base64URL. Um valor de 64 caracteres oferece uma margem confortável.
S256. Com plain, o challenge é igual ao verifier, pelo que quem vir o pedido de autorização também conhece o segredo. Os servidores que suportam PKCE têm de aceitar S256, e plain só existe para casos antigos.
A RFC 9700 admite que o PKCE protege contra CSRF quando o servidor o aplica efetivamente, mas o state continua recomendado para associar a resposta à sessão do utilizador e transportar contexto da aplicação. Muitos fornecedores ainda o exigem. É por isso que a ferramenta gera ambos.
A RFC 9700 (boas práticas de segurança do OAuth 2.0, 2025) impõe o PKCE aos clientes públicos e recomenda-o aos confidenciais; o rascunho do OAuth 2.1 torna-o obrigatório para qualquer cliente que use o código de autorização. Na prática, ative-o sempre, incluindo em aplicações de servidor com client_secret.
Os erros típicos são um challenge codificado em Base64 padrão (com +, / ou =) em vez de Base64URL, um hash calculado sobre uma versão hexadecimal do SHA-256, ou um verifier diferente entre o pedido de autorização e a troca do código. Cole o seu verifier na ferramenta para o comparar com o challenge esperado, calculado localmente sem qualquer pedido de rede.
Ferramentas relacionadas
Ferramentas semelhantes ou complementares a esta.
Gere tokens aleatórios seguros de 8 a 256 bytes em hexadecimal, Base64 ou Base64URL, com prefixo opcional.
Analise uma chave JWK ou um JWKS: kid, kty, alg, use, impressão RFC 7638 e aviso se uma chave privada estiver exposta.
Verifique a assinatura de um JWT com um segredo HMAC ou uma chave pública JWK, JWKS ou PEM e controle exp, nbf, iss e aud.
Entenda como OAuth 2.0, PKCE, JWT, JWK e JWKS se relacionam: autorização, tokens, chaves públicas e verificação.
Saiba quando usar criptografia, hashing, HMAC ou PBKDF2 para confidencialidade, integridade, autenticação e senhas.
Aprenda a construir uma CSP progressiva, compreender as suas diretivas e evitar políticas demasiado permissivas ou que quebram o site.