Mecanismos de Autenticação em Aplicações Web

Métodos Comuns de Autenticação

  • Autenticação com Cookie e Sessão
  • Autenticação por Token
  • SSO (Single Sign-On)
  • Autentciação via OAuth

Autenticação com Cookie e Sessão

O protocolo HTTP é stateless, onde cada requisição é independente. Para gerenciar estado de login, utilizam-se cookies e sessões:

  1. Usuário submete credenciais
  2. Servidor valida e cria ID de sessão no backend
  3. Resposta inclui cookie com sessionID via cabeçalho Set-Cookie

Em requisições subsequentes:

  1. Cliente envia cookie automaticamente
  2. Servidor compara sessionID com armazenamento interno
  3. Acesso liberado em caso de correspondência

Limitações da Abordagem

  • Alto consumo de recursos no servidor para armazenamento de sessões
  • Complexidade em ambientes distribuídos
  • Vulnerabilidade a ataques CSRF

Autenticação por Token

Alternativa que elimina armazenamento no servidor:

  1. Após validação, servidor gera token seguro
  2. Token é enviado ao cliente para armazenamento local
  3. Requisições subsequentes incluem token no cabeçalho Authorization

Vantagens:

  • Redução de carga no servidor
  • Armazenamento flexível (LocalStorage, SessionStorage)
  • Imunidade a CSRF

Implementação com JWT

Estrutura de JSON Web Token:

// Cabeçalho define algoritmo
cabecalho = '{"alg":"HS384","typ":"JWT"}'

// Payload contém dados
dados = '{"usuario":"admin","exp":1622779638}'

// Geração de assinatura
chaveSecreta = 'chave_privada'
tokenNaoAssinado = base64(cabecalho) + '.' + base64(dados)
assinatura = HMAC(chaveSecreta, tokenNaoAssinado)

// Token final
tokenJWT = base64(cabecalho) + '.' + base64(dados) + '.' + base64(assinatura)

Validação:

partes = token.split('.')
assinaturaRecebida = decodificarBase64(partes[2])
assinaturaCalculada = HMAC(chaveSecreta, partes[0] + '.' + partes[1])

if (assinaturaRecebida === assinaturaCalculada && dados.exp > agora()) {
  // Acesso permitido
}

SSO (Single Sign-On)

Sistema centralizado para múltiplas aplicações:

  1. Usuário acessa appA sem sessão
  2. Redirecionado para centro de autenticação
  3. Após login, ticket de acesso é gerado
  4. Ticket é verificado pelo appA
  5. Sessão é estabelecida com cookie próprio

Logout global:

  1. Logout em um aplicativo notifica centro
  2. Centro invoca andpoints de logout em todos os sistemas

Autenticação OAuth

Integração com provedores externos:

  1. Aplicativo registra-se no provedro (ex: Google)
  2. Usuário é redirecionado para tela de autorização
  3. Após permissão, código temporário é enviado
  4. Aplicativo troca código por access token
  5. Token permite acesso a dados do usuário

Tags: autenticacao Segurança jwt sso OAuth

Publicado em 6-20 19:14