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:
- Usuário submete credenciais
- Servidor valida e cria ID de sessão no backend
- Resposta inclui cookie com sessionID via cabeçalho Set-Cookie
Em requisições subsequentes:
- Cliente envia cookie automaticamente
- Servidor compara sessionID com armazenamento interno
- 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:
- Após validação, servidor gera token seguro
- Token é enviado ao cliente para armazenamento local
- 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:
- Usuário acessa appA sem sessão
- Redirecionado para centro de autenticação
- Após login, ticket de acesso é gerado
- Ticket é verificado pelo appA
- Sessão é estabelecida com cookie próprio
Logout global:
- Logout em um aplicativo notifica centro
- Centro invoca andpoints de logout em todos os sistemas
Autenticação OAuth
Integração com provedores externos:
- Aplicativo registra-se no provedro (ex: Google)
- Usuário é redirecionado para tela de autorização
- Após permissão, código temporário é enviado
- Aplicativo troca código por access token
- Token permite acesso a dados do usuário