0Pricing
Cryptology Academy · Aula

PKCE: Protegendo Clientes Públicos

Compreenda o Proof Key for Code Exchange e como ele impede ataques de interceptação de códigos de autorização.

PKCE: Protegendo Clientes Públicos é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.

Interceptação do código de autorização

Sem PKCE, os aplicativos móveis ficam vulneráveis a ataques de interceptação do código de autorização. Quando o servidor de autorização redireciona o código de autorização para o esquema de URI personalizado registrado pelo aplicativo, como myapp://callback, qualquer aplicativo malicioso no mesmo dispositivo que registre o mesmo esquema de URI pode interceptar o redirecionamento e roubar o código.

Como funciona a interceptação

O ataque ocorre da seguinte forma: um aplicativo malicioso registra o mesmo esquema de URI personalizado que o aplicativo legítimo. Quando o servidor de autorização redireciona o código para myapp://callback, o OS pode apresentar os dois aplicativos como responsáveis pelo atendimento. Se o usuário selecionar o aplicativo malicioso ou o OS usá-lo como padrão, o invasor receberá o código de autorização e poderá trocá-lo por tokens sem conhecer o segredo do cliente.

Verificador do código PKCE

O PKCE (RFC 7636) adiciona um segredo gerado dinamicamente ao fluxo do código de autorização. Antes de iniciar o fluxo, o cliente gera uma sequência de caracteres criptograficamente aleatória, com 43 a 128 caracteres, chamada verificador do código. Essa sequência é exclusiva de cada solicitação de autorização e nunca é transmitida até a etapa de troca do token.

Cálculo do desafio do código

O cliente calcula um desafio do código a partir do verificador: code_challenge = BASE64URL(SHA256(code_verifier)). Usar SHA256 é o método exigido pelo RFC 7636; o método "plain", que envia o verificador diretamente, não é recomendado. O desafio do código é uma transformação unidirecional do verificador, o que significa que conhecer o desafio não revela o verificador.

Inclusão do desafio do código na autorização

A solicitação de autorização inclui dois parâmetros adicionais: "code_challenge=BASE64URL(SHA256(verifier))&code_challenge_method=S256". O servidor de autorização armazena o desafio do código associado ao código de autorização emitido. Nenhum segredo que pudesse ser interceptado nessa etapa é transmitido ao servidor.

Troca do token com o verificador do código

Durante a troca do token (POST para o ponto de acesso de tokens), o cliente inclui "code_verifier=ORIGINAL_RANDOM_STRING" junto com o código de autorização. O servidor de autorização calcula BASE64URL(SHA256(code_verifier)) e verifica se o resultado corresponde ao code_challenge armazenado. Somente o cliente legítimo que gerou o verificador pode passar nessa verificação.

Por que a interceptação falha com PKCE

Se um invasor interceptar o código de autorização, receberá apenas o código e o desafio do código, que é público. Para trocar o código por tokens, ele precisará fornecer o verificador do código. Como o verificador foi gerado pelo cliente legítimo e nunca foi transmitido até a troca do token, que ocorre com segurança, o invasor não pode calculá-lo nem obtê-lo.

PKCE Impede a Injeção de Código

O PKCE também impede ataques de injeção do código de autorização, nos quais um atacante substitui um código válido por um código roubado no redirecionamento. O desafio do código roubado não corresponde ao verificador que o cliente da vítima apresentará, fazendo a troca de tokens falhar. O PKCE oferece defesa em profundidade contra vários vetores de ataque simultaneamente.

PKCE para Todos os Clientes

Embora a RFC 7636 tenha sido inicialmente descrita como uma solução para clientes públicos (aqueles sem segredos de cliente), o BCP de Segurança do OAuth e o OAuth 2.1 exigem PKCE para todos os clientes, incluindo clientes confidenciais com segredos de cliente. O PKCE oferece proteção independente da autenticação do cliente, tornando-o universalmente benéfico.

PKCE no OAuth 2.1

O OAuth 2.1 (draft-ietf-oauth-v2-1) consolida as melhores práticas de segurança do BCP de Segurança do OAuth em um único documento. Ele exige PKCE para todos os fluxos de código de autorização, torna obsoleto o fluxo implícito e exige a rotação de tokens de atualização. O PKCE é, na prática, o padrão mínimo obrigatório para qualquer nova implementação do OAuth 2.0.

Observações de Implementação

Implementar o PKCE corretamente exige: usar um gerador aleatório criptograficamente seguro para o verificador (pelo menos 32 bytes aleatórios, codificados posteriormente em base64url), armazenar o verificador com segurança no cliente (não na URL nem nos registros), usar o método S256 (não plain) e garantir que o verificador seja descartado após a troca de tokens. A maioria das bibliotecas OAuth modernas gerencia o PKCE automaticamente.

Verificação do Verificador de Código do PKCE

No PKCE, qual é a relação entre o verificador de código e o desafio de código?

Recapitulação da Lição: Segurança do PKCE

O PKCE (RFC 7636) impede a interceptação do código de autorização associando cada código a um verificador de código gerado dinamicamente e conhecido apenas pelo cliente legítimo. O verificador passa por hash para produzir o desafio de código (enviado publicamente). A troca de tokens exige o verificador original. O PKCE impede ataques de interceptação e de injeção. O OAuth 2.1 exige PKCE para todos os fluxos de código de autorização.

Perguntas Frequentes

A aula “PKCE: Protegendo Clientes Públicos” é grátis?

Sim — o texto completo de “PKCE: Protegendo Clientes Públicos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.

O que vou aprender em “PKCE: Protegendo Clientes Públicos”?

Compreenda o Proof Key for Code Exchange e como ele impede ataques de interceptação de códigos de autorização. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cryptology Academy?

Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “PKCE: Protegendo Clientes Públicos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cryptology Academy?

Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fluxos do OAuth 2.0 e Tipos de Tokens
  2. PKCE: Protegendo Clientes Públicos
  3. Claims e Tokens de ID do OpenID Connect
  4. Vulnerabilidades do OAuth e Padrões de Ataque
← Voltar para Cryptology Academy