OAuth 2.0 e OpenID Connect: O Guia Definitivo para Desenvolvedores
Se você jÔ implementou o "Entrar com Google" ou acessou uma API em nome de um usuÔrio, você jÔ esbarrou no OAuth 2.0. Apesar de estar em todo lugar, ainda é um dos assuntos que mais confunde a galera no desenvolvimento web. Termos como "Implicit Flow", "Bearer Token" e "OIDC" são jogados pra todo lado, causando confusão e, pior, brechas de segurança.
Este guia veio para ser o recurso definitivo para você entender OAuth 2.0 e OpenID Connect (OIDC), focando no que você realmente precisa saber para construir aplicações seguras.
Autenticação vs. Autorização
Antes de mergulhar nos protocolos, precisamos separar dois conceitos fundamentais:
- Autenticação (AuthN): Quem é você? (ex: verificar a identidade do usuÔrio).
- Autorização (AuthZ): O que você pode fazer? (ex: dar permissão de acesso a um recurso).
OAuth 2.0 é um protocolo para autorização. Ele permite que uma aplicação acesse recursos hospedados por outro servidor em nome de um usuÔrio.
OpenID Connect (OIDC) Ć© uma camada construĆda em cima do OAuth 2.0 especificamente para autenticação. Ele permite que os clientes verifiquem a identidade do usuĆ”rio.
Os PapƩis (Roles)
Para entender os fluxos, vocĆŖ precisa conhecer os jogadores:
- Resource Owner (Dono do Recurso): O usuÔrio (você).
- Client (Cliente): A aplicação tentando acessar a conta do usuÔrio (ex: um web app).
- Authorization Server (Servidor de Autorização): O servidor que mostra a tela de login e emite os tokens (ex: Google, Auth0).
- Resource Server (Servidor de Recursos): A API que hospeda os dados do usuƔrio.
Os Tokens
OAuth e OIDC dependem muito de tokens. Entender a diferenƧa Ʃ crucial.
Access Token (Token de Acesso)
Essa Ʃ a chave do castelo. O cliente envia esse token para o Servidor de Recursos para acessar os dados. Geralmente Ʃ um JWT (JSON Web Token), mas tambƩm pode ser uma string opaca.
- Propósito: Autorização.
- PĆŗblico: Servidor de Recursos.
ID Token (Apenas OIDC)
Esse token contém informações sobre o usuÔrio (nome, email, foto). à estritamente para o Cliente identificar o usuÔrio.
- Propósito: Autenticação.
- PĆŗblico: Cliente.
- Formato: Sempre um JWT.
Refresh Token (Token de Atualização)
Um token de longa duração usado para obter novos Access Tokens quando o atual expira. Isso permite que o usuÔrio continue logado sem ter que digitar a senha de novo.
Dica: Debugar JWTs pode ser uma dor de cabeƧa. Use o Decodificador JWT do Pockit para inspecionar o cabeƧalho e o payload dos seus tokens com seguranƧa, sem que eles saiam do seu navegador.
Fluxos Comuns (Grant Types)
O "Grant Type" determina como o cliente consegue o Access Token. Escolher o errado Ʃ um risco de seguranƧa comum.
1. Authorization Code Flow (com PKCE)
Melhor para: Apps server-side, SPAs e Apps mobile.
Esse é o padrão ouro. Em vez de pegar um token direto, o cliente pega um "código" temporÔrio que troca por um token. PKCE (Proof Key for Code Exchange) adiciona uma camada de segurança, prevenindo ataques de interceptação de código.
- O cliente redireciona o usuÔrio para o Servidor de Autorização.
- O usuƔrio faz login e aprova o acesso.
- O Servidor de Autorização redireciona de volta para o Cliente com um
code. - O cliente troca o
code+code_verifierpor um Access Token.
2. Client Credentials Flow
Melhor para: Comunicação MÔquina a MÔquina (M2M).
Usado quando uma aplicação precisa acessar seus próprios recursos, não os de um usuÔrio. Não tem interação do usuÔrio.
- O cliente envia
client_ideclient_secretpara o Servidor de Autorização. - O Servidor de Autorização retorna um Access Token.
3. Implicit Flow (Obsoleto)
Melhor para: Nada (Historicamente usado para SPAs).
Esse fluxo retorna tokens direto na URL. Agora é considerado inseguro devido ao risco de vazamento de tokens no histórico do navegador e logs. Não use isso.
Resolvendo Problemas Comuns
"redirect_uri_mismatch"
Esse é o erro mais comum. A redirect_uri que você envia na requisição deve bater exatamente com uma das URIs permitidas no painel do seu provedor OAuth. Até uma barra no final faz diferença.
"invalid_grant"
Esse erro genƩrico geralmente significa:
- O código de autorização expirou (eles duram pouco).
- O código jÔ foi usado.
- A
redirect_uriusada para pegar o código não bate com a usada para trocar.
Conclusão
OAuth 2.0 e OIDC são ferramentas poderosas que formam a espinha dorsal da identidade moderna. Entendendo a distinção entre AuthN e AuthZ, escolhendo o fluxo certo (Auth Code com PKCE!), e sabendo como inspecionar seus tokens, você pode construir aplicações seguras e robustas.
Não invente sua própria criptografia, e não tente reinventar a autenticação. Siga os padrões, e seus usuÔrios (e seu time de segurança) vão agradecer.
Explore ferramentas relacionadas
Experimente estas ferramentas gratuitas do Pockit