Gerador de cabeçalho Basic Auth

Informe um usuário e uma senha para obter o cabeçalho Authorization: Basic e um comando curl pronto para executar, ou cole um cabeçalho existente para ver as credenciais que ele contém.

Cabeçalho Authorization
Comando curl

Decodificar um cabeçalho existente

Funciona inteiramente no seu navegador. Nada é enviado.

Como usar

  1. Preencha os campos Usuário e Senha.
  2. Copie o Cabeçalho Authorization gerado para o seu cliente ou use o Comando curl para testar a requisição.
  3. 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 Authorization nos 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?
Cliente e servidor podem divergir quanto à codificação de caracteres. A RFC 7617 permite que o servidor declare 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.