0Pricing
Cyber Security Academy · Aula

Fluxos do OAuth 2.0

Concessões de autorização e tokens.

Fluxos do OAuth 2.0 é uma aula grátis de Cyber Security Academy no CoddyKit. Esta é a aula 1 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 Cyber Security Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cyber Security Academy inclui 4 aulas no total.

O que o OAuth 2.0 realmente resolve

OAuth 2.0 é uma estrutura de autorização delegada. Ele permite que um usuário conceda a um aplicativo de terceiros acesso limitado aos seus recursos em outro serviço sem compartilhar sua senha.

  • Ele trata de autorização (o que um aplicativo pode fazer), não de autenticação (quem é o usuário).
  • O aplicativo recebe um access_token com escopo limitado, nunca as credenciais do usuário.

Os defensores devem lembrar-se: o OAuth, por si só, não comprova a identidade. Tratar um token de acesso como prova de login é um erro clássico abordado pelo OIDC.

As quatro funções

Todo fluxo OAuth envolve quatro funções. Mapeá-las corretamente é essencial para a modelagem de ameaças.

  • Proprietário dos recursos — o usuário que possui os dados.
  • Cliente — o aplicativo que solicita acesso.
  • Servidor de autorização (AS) — emite tokens após o consentimento.
  • Servidor de recursos (RS) — a API que armazena dados protegidos e valida tokens.

Os limites de confiança ficam entre essas funções. Um cliente comprometido ou um AS permissivo compromete toda a cadeia.

Roles:
  Resource Owner  -> grants consent
  Client          -> requests + uses tokens
  Authorization Server -> issues tokens
  Resource Server -> validates tokens

Concessão de código de autorização

A concessão de código de autorização é o fluxo recomendado para aplicativos web e móveis. Ela separa o redirecionamento voltado ao usuário da troca secreta de tokens.

  • O usuário é redirecionado ao AS para se autenticar e dar consentimento.
  • O AS devolve um code de curta duração ao URI de redirecionamento registrado.
  • O cliente troca o código, no lado do servidor, por tokens através de um canal de retorno.

Como os tokens são obtidos pelo canal de retorno, eles nunca aparecem na barra de endereço ou no histórico do navegador.

GET /authorize?response_type=code
  &client_id=app123
  &redirect_uri=https://app.example/cb
  &scope=read:profile
  &state=xyz

// then back-channel:
POST /token  grant_type=authorization_code&code=...

PKCE: prova de chave para troca de código

O PKCE (RFC 7636) reforça a concessão de código de autorização e agora é recomendado para todos os clientes, inclusive os confidenciais.

  • O cliente gera um code_verifier aleatório e envia seu hash como code_challenge.
  • Na troca do token, ele deve apresentar o verificador original.

Isso vincula o código ao solicitante original, impedindo que um invasor que intercepte o código de autorização o resgate.

code_verifier  = random 43-128 chars
code_challenge = BASE64URL(SHA256(verifier))

/authorize ... &code_challenge=...&code_challenge_method=S256
/token     ... &code_verifier=<original>

Concessão de credenciais do cliente

A concessão de credenciais do cliente destina-se ao acesso de máquina para máquina, quando nenhum usuário está envolvido (um serviço de back-end chamando uma API).

  • O cliente se autentica com suas próprias credenciais e recebe um token de acesso.
  • Normalmente, não há consentimento do usuário nem token de atualização.

Restrinja rigorosamente o escopo desses tokens e faça a rotação dos segredos do cliente. Nunca use esse fluxo para personificar usuários finais.

POST /token
  grant_type=client_credentials
  client_id=service-a
  client_secret=***
  scope=orders:read

Tokens de acesso versus tokens de atualização

O OAuth emite dois tipos principais de token, com durações e regras de tratamento muito diferentes.

  • Token de acesso — de curta duração, enviado ao servidor de recursos em cada chamada. Trate-o como uma credencial de portador.
  • Token de atualização — de longa duração, usado somente contra o AS para obter novos tokens de acesso.

Os tokens de atualização têm alto valor. Armazene-os com segurança, vincule-os ao cliente e ofereça suporte à revogação.

POST /token
  grant_type=refresh_token
  refresh_token=<long-lived>
  client_id=app123

Tokens de portador e transporte

A maioria dos tokens de acesso do OAuth é composta por tokens de portador: quem detém o token pode usá-lo, assim como dinheiro em espécie.

  • Sempre transmita por TLS; nunca em URLs, onde eles vazam para registros e referenciadores.
  • Envie por meio do cabeçalho Authorization.
  • Considere tokens vinculados ao remetente (DPoP, mTLS) para APIs de alto risco.
Authorization: Bearer eyJhbGciOiJSUzI1NiIs...

// AVOID:
GET /api/data?access_token=...   // leaks in logs

A concessão implícita está obsoleta

A concessão implícita legada retornava tokens diretamente no fragmento do URI de redirecionamento. Ela agora é desaconselhada pelo BCP de Segurança do OAuth 2.0 e foi removida no OAuth 2.1.

  • Os tokens vazavam pelo histórico do navegador, pelos cabeçalhos de referenciador e pelos registros.
  • A ausência de um canal de retorno resultava em uma autenticação mais fraca do cliente.

Em vez disso, use Código de autorização com PKCE para SPAs.

O parâmetro state e CSRF

O parâmetro state protege a etapa de redirecionamento contra CSRF. O cliente gera um valor aleatório, armazena-o na sessão e o verifica no retorno de chamada.

  • Se o state retornado não corresponder, rejeite a resposta.
  • Isso impede que um invasor injete seu próprio código de autorização na sessão de uma vítima.
before:  session.state = randomNonce()
/authorize ... &state=<nonce>

on callback:
  if (req.state !== session.state) reject()

Escopos e privilégio mínimo

Escopos expressam a granularidade do acesso concedido por um token. Aplique o privilégio mínimo em todas as etapas.

  • Solicite apenas os escopos de que a funcionalidade precisa (read:profile, não admin).
  • Os servidores de recursos devem impor o escopo em cada ponto de acesso, não apenas confiar em um token válido.

O consentimento amplo demais é um risco comum no mundo real: os usuários aprovam aplicativos que solicitam muito mais do que o necessário.

Configurações incorretas comuns do OAuth

A maioria dos incidentes do OAuth decorre da configuração, não do próprio protocolo.

  • Redirecionamento aberto / correspondência flexível de redirect_uri permite que invasores roubem códigos.
  • A ausência de state ou PKCE permite CSRF e injeção de códigos.
  • Tokens de acesso de longa duração sem revogação.
  • Tratar um token de acesso como uma asserção de autenticação.

Registre URIs de redirecionamento exatas e valide-as rigorosamente.

redirect_uri allowlist:
  EXACT: https://app.example/cb
  NOT:   https://app.example/*  (too broad)

Verificação rápida: protegendo a autenticação de SPA

Escolha o fluxo correto e moderno para o cenário abaixo.

Recapitulação: fluxos do OAuth 2.0

Principais conclusões:

  • O OAuth 2.0 é autorização delegada, não autenticação.
  • Quatro funções: proprietário do recurso, cliente, servidor de autorização e servidor de recursos.
  • Código de autorização + PKCE é o padrão para a Web, dispositivos móveis e SPAs.
  • Credenciais do cliente abrangem o acesso entre máquinas.
  • Proteja-o com state, correspondência rigorosa de URIs de redirecionamento, tokens de acesso de curta duração e TLS em toda parte.
  • As concessões implícita e de senha estão obsoletas.

Perguntas Frequentes

A aula “Fluxos do OAuth 2.0” é grátis?

Sim — o texto completo de “Fluxos do OAuth 2.0” é 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 Cyber Security Academy, atualize para CoddyKit PRO. O curso de Cyber Security Academy inclui 4 aulas no total.

O que vou aprender em “Fluxos do OAuth 2.0”?

Concessões de autorização e tokens. Você pratica Cyber Security 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 Cyber Security Academy?

Nenhuma experiência prévia é necessária. Cyber Security 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 1 de 4.

Quanto tempo leva a aula “Fluxos do OAuth 2.0”?

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 Cyber Security Academy?

Sim. Cada aula de Cyber Security 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
  2. OpenID Connect (OIDC)
  3. SAML e federação
  4. Ataques a tokens e reforço de segurança
← Voltar para Cyber Security Academy