HTTP Basic Authentication é uma das formas mais antigas e simples de proteger um recurso com senha: o navegador pede usuário e senha, e eles são enviados ao servidor em toda requisição. Essa simplicidade é justamente o seu maior ponto fraco.
Como o cabeçalho Authorization é montado
Usuário e senha são unidos por dois-pontos (usuario:senha), e a string resultante é codificada em Base64 e colocada no cabeçalho Authorization: Basic <string_codificada>. O navegador reenvia esse cabeçalho automaticamente em toda requisição seguinte após o primeiro login bem-sucedido.
Por que Base64 não é segurança
Base64 é um esquema de codificação, não criptografia: qualquer pessoa consegue decodificar a string de volta para usuario:senha em segundos, sem precisar de chave nenhuma. Se a requisição for interceptada — numa rede Wi-Fi pública desprotegida, por exemplo — as credenciais ficam expostas na hora.
Acentos, cedilha e o tamanho do Base64
Base64 codifica bytes, não caracteres — por isso a codificação da string original importa. Uma letra sem acento ocupa 1 byte em UTF-8, mas caracteres como ã, ç, õ ou é, tão comuns em nomes e palavras do português, ocupam 2 bytes cada. Uma senha como São_Paulo123 ou José&Conceição gera um token Base64 proporcionalmente maior do que uma senha só com caracteres ASCII do mesmo tamanho. Antes da RFC 7617 (2015), a especificação original do Basic Auth nem sequer definia uma codificação de caracteres para usuário e senha, o que causava divergências entre clientes HTTP ao lidar com acentuação.
Para que serve
- Proteger rapidamente um servidor de staging ou uma ferramenta interna com senha durante o desenvolvimento.
- Montar um cabeçalho Authorization correto para testar uma API manualmente com curl ou Postman.
- Entender por que usar Basic Auth em HTTP puro é considerado uma falha de segurança séria.
Basic Auth não tem logout nativo
O navegador armazena as credenciais em cache e adiciona automaticamente o cabeçalho Authorization em toda requisição seguinte para a mesma origem, até a aba ser fechada — o protocolo simplesmente não tem um botão "sair" padrão. Para forçar o logout, servidores recorrem a truques: retornar 401 propositalmente com um valor de realm diferente, ou depender de o usuário fechar todas as abas do navegador.