Como usar
- Preencha os campos Usuário e Senha.
- Copie o Cabeçalho Authorization gerado para o seu cliente ou use o Comando curl para testar a requisição.
- Para ler um cabeçalho existente, cole-o na seção Decodificar um cabeçalho existente e o usuário e a senha serão exibidos.
Como funciona a autenticação HTTP Basic
A autenticação Basic é definida na RFC 7617. Quando um recurso é protegido, o servidor responde com 401 Unauthorized e um cabeçalho WWW-Authenticate: Basic realm="...". O cliente então junta o usuário e a senha com dois-pontos, codifica o resultado em Base64 e o envia em todas as requisições:
Authorization: Basic base64(username ":" password)
# Exemplo da RFC 7617: usuário "Aladdin", senha "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Os navegadores cuidam dessa troca sozinhos e exibem uma janela de login, enquanto scripts e clientes de API normalmente enviam o cabeçalho já na primeira requisição, sem esperar o desafio do servidor. Como os dois-pontos separam os dois valores, o usuário não pode conter esse caractere; a senha pode. O servidor pode acrescentar charset="UTF-8" ao desafio para avisar que espera credenciais com caracteres não ASCII em UTF-8.
Base64 não é criptografia
O cabeçalho parece embaralhado, mas qualquer pessoa que o veja consegue recuperar a senha em segundos, com o decodificador desta página ou com qualquer decodificador Base64. A autenticação Basic só é aceitável sobre HTTPS, em que o TLS criptografa o cabeçalho durante o trânsito. Tenha em mente também que:
- as credenciais viajam em todas as requisições, então uma única requisição em HTTP simples já as expõe;
- proxies, balanceadores de carga e ferramentas de depuração podem registrar o cabeçalho
Authorizationnos logs se não forem configurados para evitar isso; - os navegadores guardam as credenciais informadas até serem fechados, e não existe uma forma padrão de fazer logout.
Para APIs públicas, tokens de API revogáveis ou OAuth são mais adequados. A autenticação Basic continua sendo uma escolha razoável para ferramentas internas, ambientes de homologação e chamadas entre servidores sobre TLS.
Como enviar o cabeçalho pelo código
# o curl monta o cabeçalho sozinho
curl -u 'user:password' https://api.example.com/
// fetch em JavaScript (btoa aceita apenas caracteres Latin-1)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })
# Python com requests
requests.get(url, auth=('user', 'password'))
Evite incluir as credenciais na URL, como em https://user:password@host/. A RFC 3986 desaconselha essa forma, ela acaba ficando no histórico do navegador e nos logs do servidor, e os navegadores modernos a restringem.
Perguntas frequentes
Como decodifico um cabeçalho Basic Auth?
Cole o cabeçalho na seção Decodificar um cabeçalho existente e o usuário e a senha aparecem na hora. Qualquer decodificador Base64 dá o mesmo resultado, e é justamente por isso que o cabeçalho só deve trafegar por HTTPS.
A senha pode conter dois-pontos?
Sim. O servidor divide o valor decodificado no primeiro dois-pontos, então tudo o que vem depois pertence à senha. O usuário, por outro lado, não pode conter dois-pontos.
A autenticação HTTP Basic é segura?
Sobre HTTPS e com uma senha forte e exclusiva, ela protege as credenciais durante o trânsito, mas elas são enviadas em todas as requisições e não expiram como um token. Nunca a use sobre HTTP simples.
Por que o login falha com senhas que têm acentos ou caracteres não latinos?
charset="UTF-8"; sem isso, servidores mais antigos podem presumir ISO-8859-1 e comparar bytes diferentes.Minha senha é enviada para algum lugar?
Não. O cabeçalho é montado por JavaScript no seu navegador e nada é transmitido. Mesmo assim, use credenciais de teste ao compartilhar com outras pessoas um comando curl gerado aqui.