OAuth 2.0, OpenID Connect e JWT
Do zero
Pense num hotel. Você quer que a lavanderia busque uma roupa no seu quarto.
- Você não entrega a sua chave à lavanderia. Pede à recepção um cartão que abre só o seu quarto, só hoje. Isso é o OAuth 2.0: autoriza um sistema (a lavanderia) a acessar algo seu (o quarto) sem receber a sua senha (a chave). O cartão é o access token.
- Antes de emitir o cartão, a recepção confere o seu documento e pode entregar à lavanderia uma ficha dizendo quem você é: “hóspede do 302, Ana Souza”. Isso é o OpenID Connect: autentica, diz quem é o usuário. A ficha é o ID token.
- A ficha (e, muitas vezes, o cartão) vem num formato padrão, com um carimbo da recepção que denuncia qualquer alteração. Esse formato é o JWT. O carimbo é a assinatura; o conteúdo, qualquer um consegue ler.
No mundo real, a recepção é o gov.br, a lavanderia é o sistema em que você clicou em “Entrar com gov.br” e o quarto são os seus dados guardados numa API.
Frase para guardar: OIDC diz quem você é; OAuth diz o que o sistema pode acessar; JWT é o formato em que isso viaja.
Em 1 minuto
- OAuth 2.0 autoriza. Deixa um aplicativo acessar recursos em nome do usuário sem receber a senha dele. Entrega um access token.
- OpenID Connect (OIDC) autentica. É uma camada sobre o OAuth 2.0 que diz quem é o usuário. Entrega um ID token, sempre no formato JWT.
- JWT é um formato. Três partes em Base64URL separadas por ponto: cabeçalho, payload e assinatura.
Exemplo concreto: “Entrar com gov.br”
O Login Único do gov.br usa OpenID Connect com o fluxo Authorization Code e PKCE obrigatório (roteiro de integração).
- Você clica em “Entrar com gov.br” num sistema público (o cliente).
- O sistema leva você ao gov.br (o servidor de autorização), onde você faz login.
- O gov.br devolve ao sistema um código de autorização.
- O sistema troca o código por um ID token (quem você é) e um access token (o que ele pode acessar).
- Sua senha nunca passou pelo sistema.
| Papel no OAuth 2.0 | No exemplo |
|---|---|
| Dono do recurso (resource owner) | Você |
| Cliente (client) | O sistema em que você clicou |
| Servidor de autorização (authorization server) | O gov.br |
| Servidor de recursos (resource server) | A API que guarda os dados |
Comparação: OAuth 2.0 × OpenID Connect × JWT
| OAuth 2.0 | OpenID Connect | JWT | |
|---|---|---|---|
| O que é | Protocolo de autorização | Camada de autenticação sobre o OAuth 2.0 | Formato de token |
| Pergunta que responde | O que este app pode acessar? | Quem é o usuário? | Como empacotar e assinar dados? |
| Token típico | Access token | ID token (sempre JWT) | É o próprio formato |
| Especificação | RFC 6749 | OpenID Connect Core 1.0 | RFC 7519 |
Por dentro de um JWT
Na prática, o token é uma linha só. Aqui ele foi quebrado nos pontos para mostrar as três partes:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
.eyJpc3MiOiJodHRwczovL3Nzby5leGVtcGxvLmdvdi5iciIsInN1YiI6IjEyMyIsImF1ZCI6InNpc3RlbWEtdGNlIiwiaWF0IjoxNzkyNjcwNDAwLCJleHAiOjE3OTI2NzQwMDB9
.<assinatura>
Decodificando o Base64URL das duas primeiras partes, sem chave nenhuma:
// Cabeçalho
{ "alg": "RS256", "typ": "JWT" }
// Payload
{
"iss": "https://sso.exemplo.gov.br",
"sub": "123",
"aud": "sistema-tce",
"iat": 1792670400,
"exp": 1792674000
}
- iss: quem emitiu · sub: sobre quem é · aud: para quem foi emitido · iat: quando foi emitido · exp: quando expira (aqui, 1 hora depois).
- O payload é só codificado, não criptografado: qualquer um lê. A assinatura garante integridade e autenticidade; para sigilo existe o JWE.
O fluxo certo para cada caso
- Authorization Code com PKCE: apps web, celular e SPA. A RFC 9700 (janeiro de 2025) exige PKCE de clientes públicos.
- Client Credentials: máquina a máquina, sem usuário, como um robô que chama uma API.
- Implicit: não deve ser usado. Resource Owner Password Credentials: proibido (“MUST NOT”). Ambos pela RFC 9700.
Como a FCC cobra
OAuth autoriza, OIDC autentica: é a diferença mais cobrada.
- Autenticação × autorização, ou seja, OIDC × OAuth.
- Papéis do OAuth 2.0 dentro de um cenário.
- Partes e claims do JWT, e se o payload é sigiloso.
- Qual fluxo usar em cada tipo de aplicação.
Pegadinhas
- “O payload de um JWT assinado é criptografado.” Falso: qualquer um lê.
- “OAuth 2.0 é um protocolo de autenticação.” Falso: ele autoriza; quem autentica é o OIDC.
- “O ID token vai para a API para acessar recursos.” Falso: para a API vai o access token.
- “PKCE dispensa HTTPS.” Falso: PKCE protege a troca do código; o HTTPS continua obrigatório.
Explique com suas palavras
Explique a um amigo que nunca programou o que acontece quando ele clica em “Entrar com gov.br” e qual a diferença entre OAuth 2.0, OpenID Connect e JWT.
- Escreva sem olhar a lição, com frases curtas e um exemplo seu.
- Onde travar ou precisar de jargão, há uma lacuna: releia só essa parte.
- Compare com a explicação-modelo e reescreva o que faltou.
Fica salva neste navegador.
Comparar com uma explicação-modelo
Quando você clica em “Entrar com gov.br”, o sistema não pede a sua senha: manda você ao gov.br. Lá você faz login, e o gov.br conta ao sistema quem você é e o que ele pode acessar.
Quem você é chega num ID token: isso é o OpenID Connect, que autentica. O que o sistema pode acessar chega num access token: isso é o OAuth 2.0, que autoriza. O ID token vem sempre como JWT, um texto em três partes com uma assinatura que denuncia alteração, mas que qualquer um consegue ler.
Teste-se
Desenvolvimento de Sistemas · OAuth e JWT · Inédita, estilo FCC
Questão 1 de 3
Numa aplicação que usa OpenID Connect, o token que informa ao cliente a identidade do usuário autenticado é o
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Desenvolvimento de Sistemas · OAuth e JWT · Inédita, estilo FCC
Questão 2 de 3
Um JWT assinado com RS256 foi interceptado. O atacante
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Desenvolvimento de Sistemas · OAuth e JWT · Inédita, estilo FCC
Questão 3 de 3
Para um aplicativo de página única (SPA), que não consegue guardar segredo, o fluxo OAuth 2.0 recomendado é
A–E escolhem, Enter confirma. Botão direito ou Shift + letra risca.
Toque longo numa alternativa para riscá-la.
Flashcards gerados
| Frente | Verso |
|---|---|
| OAuth 2.0 autentica ou autoriza? | Autoriza. Quem autentica é o OpenID Connect. Exemplo: No “Entrar com gov.br”, o ID token (OIDC) diz quem você é e o access token (OAuth) diz o que o sistema pode acessar. |
| O que o ID token informa? | Quem é o usuário. No OIDC, é sempre um JWT. Exemplo: No “Entrar com gov.br”, o sistema recebe o ID token com quem fez login; para a API vai o access token. |
| As três partes do JWT | Cabeçalho, payload e assinatura, em Base64URL, separados por ponto. Exemplo: No token da lição, o cabeçalho traz { "alg": "RS256" } e o payload traz iss, sub, aud, iat e exp. |
| Para que serve o claim aud? | Diz para quem o token foi emitido; a API recusa token feito para outro sistema. Exemplo: Um token com "aud": "sistema-tce" é recusado por qualquer API que não seja a do sistema-tce. |
| Fluxo OAuth para SPA e celular | Authorization Code com PKCE. Exemplo: O Login Único do gov.br exige PKCE; a RFC 9700 exige PKCE de clientes públicos. |
Ligação com o estudo de caso
Num caso sobre uma API para jurisdicionados, isto vira proposta: login por OIDC (gov.br), access token curto com escopos mínimos, validação de iss, aud e exp em toda chamada, HTTPS obrigatório e refresh token com rotação.
Fontes da lição
Claude explica
Tire dúvidas sobre este tema no Claude: o site copia o pedido com a lição e abre uma conversa nova, na sua conta. Confira na fonte qualquer fato de lei ou de norma.
Pratique fora do site
Faça questões da FCC sobre este tópico no QConcursos ou no Gran e registre aqui quantas fez: elas contam na meta da semana e no status do tópico.