Pular para o conteúdo

Design clássico · Pleno

Autenticação (sessão, JWT, OAuth/OIDC)

Projeto de entrevista clássico. Pontos centrais: autenticação e autorização.

14 min de leitura · Conteúdo revisado em 23 de outubro de 2026

Resposta curta

Projeto de entrevista clássico. Pontos centrais: autenticação e autorização. Um sistema de autenticação responde a duas perguntas diferentes. A primeira é quem é a pessoa: o OpenID Connect permite que o cliente verifique a identidade do usuário com base na autenticação feita por um servidor de autorização.

01 · CONTEXTO

Duas perguntas: quem é e o que pode

Um sistema de autenticação responde a duas perguntas diferentes. A primeira é quem é a pessoa: o OpenID Connect permite que o cliente verifique a identidade do usuário com base na autenticação feita por um servidor de autorização. A segunda é o que uma aplicação pode fazer em nome dela: o OAuth permite que uma aplicação de terceiros obtenha acesso limitado a um serviço HTTP.

Resolvida a primeira pergunta, o sistema precisa lembrar o resultado, e o HTTP não ajuda: cada par de requisição e resposta é independente das outras interações. É aí que entram o identificador de sessão ou o token, que, segundo o OWASP, ligam as credenciais autenticadas ao tráfego do usuário e aos controles de acesso. Depois de estabelecida a sessão autenticada, esse identificador equivale temporariamente ao método de autenticação mais forte usado.

02 · SESSÃO NO SERVIDOR

Sessão: o estado fica no servidor

No modelo de sessão o navegador guarda só um identificador e o significado dele fica no servidor. O OWASP pede que o valor do identificador seja sem significado e nunca inclua informação sensível nem dados pessoais (PII). O significado e a lógica de negócio associados a ele ficam em objetos de sessão ou em um repositório de sessões no servidor.

A imprevisibilidade do identificador é requisito: o OWASP pede entropia suficiente para impedir adivinhação por força bruta e fixa o mínimo exigido em 64 bits.

  1. O navegador envia as credenciais e o balanceador as encaminha ao serviço de autenticação.

    Diagrama da arquitetura: Autenticação com sessão no servidor
    CLNavegador
    NWBalanceador
    CPServiço de autenticaçãorecebe o login
    CPAPI de negócio
    DBBanco de usuários
    CHArmazenamento de sessões
  2. O serviço de autenticação confere as credenciais no banco de usuários.

    Diagrama da arquitetura: Autenticação com sessão no servidor
    CLNavegador
    NWBalanceador
    CPServiço de autenticação
    CPAPI de negócio
    DBBanco de usuáriosconfere credenciais
    CHArmazenamento de sessões
  3. Autenticado o usuário, o serviço guarda o estado da sessão no armazenamento de sessões e devolve ao navegador só um identificador sem significado.

    Diagrama da arquitetura: Autenticação com sessão no servidor
    CLNavegador
    NWBalanceador
    CPServiço de autenticação
    CPAPI de negócio
    DBBanco de usuários
    CHArmazenamento de sessõesestado da sessão
  4. Nas chamadas seguintes o navegador reenvia o identificador, e a API de negócio o usa para consultar o armazenamento de sessões.

    Diagrama da arquitetura: Autenticação com sessão no servidor
    CLNavegador
    NWBalanceador
    CPServiço de autenticação
    CPAPI de negóciousa o identificador
    DBBanco de usuários
    CHArmazenamento de sessõesconsulta a sessão
  5. No logout, o servidor invalida a sessão no armazenamento de sessões.

    Diagrama da arquitetura: Autenticação com sessão no servidor
    CLNavegador
    NWBalanceador
    CPServiço de autenticação
    CPAPI de negócio
    DBBanco de usuários
    CHArmazenamento de sessõessessão invalidada

O cookie de sessão leva dois atributos de proteção. O atributo Secure faz o navegador enviar o cookie apenas por HTTPS. O atributo HttpOnly impede que scripts acessem o cookie, proteção que o OWASP considera obrigatória contra o roubo do identificador por XSS.

O ciclo de vida também é controlado pelo servidor. O identificador deve ser renovado depois de qualquer mudança de nível de privilégio, e o cenário mais comum é o próprio processo de autenticação. Toda sessão deve ter timeout de inatividade e timeout absoluto, impostos no servidor, e o logout deve invalidar a sessão ao menos no servidor.

03 · TOKENS

Tokens autocontidos e JWT

Um JWT é uma forma compacta e segura para URL de representar claims trocadas entre duas partes. As claims podem ser assinadas ou protegidas por MAC e/ou cifradas.

Três claims registradas pesam no desenho. A claim iss identifica quem emitiu o JWT. A claim aud identifica os destinatários, e quem processa o token sem se identificar com um valor em aud deve rejeitá-lo. A claim exp marca o momento a partir do qual o token não pode mais ser aceito.

No OAuth, o access token costuma ser opaco para o cliente. Ele pode ser um identificador usado para recuperar a autorização ou conter a própria informação de autorização de forma verificável, e representa escopos e durações de acesso concedidos pelo dono do recurso e aplicados pelo servidor de recursos e pelo servidor de autorização.

  1. O navegador envia as credenciais ao emissor, que as confere no banco de usuários.

    Diagrama da arquitetura: Autenticação com token autocontido
    CLNavegador
    NWAPI gateway
    CPEmissor de tokens
    DBBanco de usuáriosconfere credenciais
    CPServiço de negócio
  2. O emissor devolve um JWT, cujas claims podem ser assinadas, entre elas iss, aud e exp.

    Diagrama da arquitetura: Autenticação com token autocontido
    CLNavegador
    NWAPI gateway
    CPEmissor de tokensemite o JWT
    DBBanco de usuários
    CPServiço de negócio
  3. O cliente apresenta o JWT ao gateway, que não aceita o token com exp vencido e o rejeita se aud não o inclui.

    Diagrama da arquitetura: Autenticação com token autocontido
    CLNavegador
    NWAPI gatewayexamina exp e aud
    CPEmissor de tokens
    DBBanco de usuários
    CPServiço de negócio
  4. O serviço de negócio aplica os escopos e a duração de acesso representados pelo token.

    Diagrama da arquitetura: Autenticação com token autocontido
    CLNavegador
    NWAPI gateway
    CPEmissor de tokens
    DBBanco de usuários
    CPServiço de negócioaplica o escopo
  5. Quando o access token expira, o cliente usa o refresh token para obter outro access token no emissor.

    Diagrama da arquitetura: Autenticação com token autocontido
    CLNavegador
    NWAPI gateway
    CPEmissor de tokensnovo access token
    DBBanco de usuários
    CPServiço de negócio

O access token pode ter vida mais curta e menos permissões do que o dono do recurso autorizou, e o refresh token é a credencial usada para obter novos access tokens.

CritérioSessão no servidorToken autocontido
Onde fica o significadoNo servidor, em objeto ou repositório de sessãoNo próprio token, de forma verificável
O que o cliente guardaUm identificador sem significadoUm token cujas claims podem ser assinadas
Fim da validadeTimeout de inatividade e timeout absoluto, impostos no servidorA claim exp define quando o token deixa de ser aceito
Encerrar o acessoO servidor invalida a sessãoNo OAuth, um pedido de revogação invalida o token

Para encerrar o acesso de um token, o OAuth define um endpoint de revogação: ele permite ao cliente avisar o servidor de autorização que um refresh ou access token não é mais necessário, e o pedido invalida o token e, quando aplicável, outros tokens do mesmo grant de autorização.

04 · OAUTH E OIDC

Login federado com código de autorização

No fluxo de código de autorização do OpenID Connect, o cliente envia o pedido ao servidor de autorização, que autentica o usuário e o devolve ao cliente com um código. O cliente troca o código no endpoint de token, recebe um ID Token e um access token e valida o ID Token para obter o identificador do usuário.

Como o dono do recurso só se autentica no servidor de autorização, as credenciais dele nunca são compartilhadas com o cliente. O fluxo também evita expor tokens ao user agent e a outras aplicações maliciosas com acesso a ele.

  1. A aplicação cliente envia o usuário e o pedido de autenticação ao servidor de autorização.

    Diagrama da arquitetura: Login federado com OAuth e OpenID Connect
    CLNavegador
    CPAplicação clientepedido de autenticação
    CPServidor de autorização
    DBBanco de usuários
    CPAPI protegida
  2. O servidor de autorização autentica o usuário, tendo o banco de usuários como base das credenciais.

    Diagrama da arquitetura: Login federado com OAuth e OpenID Connect
    CLNavegador
    CPAplicação cliente
    CPServidor de autorizaçãoautentica o usuário
    DBBanco de usuárioscredenciais
    CPAPI protegida
  3. O servidor devolve o usuário à aplicação com um código de autorização, e as credenciais do usuário não passam pela aplicação.

    Diagrama da arquitetura: Login federado com OAuth e OpenID Connect
    CLNavegador
    CPAplicação cliente
    CPServidor de autorizaçãoemite o código
    DBBanco de usuários
    CPAPI protegida
  4. A aplicação troca o código no endpoint de token; clientes públicos devem usar PKCE para proteger o código.

    Diagrama da arquitetura: Login federado com OAuth e OpenID Connect
    CLNavegador
    CPAplicação clientecódigo com PKCE
    CPServidor de autorização
    DBBanco de usuários
    CPAPI protegida
  5. A aplicação recebe um ID Token e um access token, valida o ID Token e obtém o identificador do usuário.

    Diagrama da arquitetura: Login federado com OAuth e OpenID Connect
    CLNavegador
    CPAplicação clientevalida o ID Token
    CPServidor de autorização
    DBBanco de usuários
    CPAPI protegida
  6. Com o access token, a aplicação chama a API protegida, que deve verificar se o token foi emitido para ela.

    Diagrama da arquitetura: Login federado com OAuth e OpenID Connect
    CLNavegador
    CPAplicação cliente
    CPServidor de autorização
    DBBanco de usuários
    CPAPI protegidaverifica a audiência

O que o OpenID Connect acrescenta ao OAuth é a camada de identidade: o ID Token é um token de segurança com claims sobre a autenticação do usuário por um servidor de autorização.

Clientes públicos do OAuth são suscetíveis ao ataque de interceptação do código de autorização, e devem usar PKCE contra a injeção e o uso indevido do código.

05 · ARMADILHAS E FECHAMENTO

O que evitar e como fechar a entrevista

As recomendações de segurança do OAuth dizem que o grant de senha do dono do recurso não deve ser usado e que os clientes não devem usar o implicit grant. Refresh tokens de clientes públicos devem ser restritos ao remetente ou usar rotação. A restrição de audiência limita o access token a um servidor de recursos específico, que verifica a audiência pretendida.

Perguntas frequentes

O que é Autenticação (sessão, JWT, OAuth/OIDC)?

Projeto de entrevista clássico. Pontos centrais: autenticação e autorização.

O que o design de Autenticação (sessão, JWT, OAuth/OIDC) cobre?

Ele está organizado nestas seções: Duas perguntas: quem é e o que pode, Sessão: o estado fica no servidor, Tokens autocontidos e JWT, Login federado com código de autorização e O que evitar e como fechar a entrevista.

Quanto tempo leva Autenticação (sessão, JWT, OAuth/OIDC) e qual é o nível?

Leva cerca de 14 minutos para ler e tem nível Pleno.

Agora projete você mesmo

Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.