Como decodificar um header de Basic auth
- Cole o valor em Header Authorization, token Basic ou URL com credenciais. Todos estes funcionam:
Authorization: Basic YWRtaW46czNjcjN0OnBhc3M=Proxy-Authorization: Basic …Basic YWRtaW46czNjcjN0OnBhc3M=ou só o tokenhttps://user:password@host/path
- Deixe o Charset em Detectar automaticamente, ou force UTF-8 ou ISO-8859-1 se o resultado parecer errado.
- Leia Usuário e Senha, copie qualquer um dos dois e confira Bytes decodificados (hex) quando algum caractere parecer suspeito.
Só o esquema Basic é decodificado. Headers Digest e NTLM têm outro formato e aparecem como outro esquema.
O que o decodificador mostra
| Entrada | Usuário | Senha | Observação |
|---|---|---|---|
Basic YWRtaW46czNjcjN0OnBhc3M= | admin | s3cr3t:pass | Só o primeiro dois-pontos divide; a senha mantém o dela. |
dGVzdDoxMjOj | test | 123£ | Não é UTF-8 válido, então a detecção automática recorre ao Latin-1. |
dGVzdDoxMjPCow== | test | 123£ | O mesmo texto, em bytes UTF-8. |
https://ci-bot:p%40ss@ci.example.com/ | ci-bot | p@ss | Extraído da URL e com %-decodificação. |
Bearer eyJhbGciOi… | Erro: um token Bearer, com link para o decodificador de JWT. |
A detecção automática segue uma ordem. ASCII puro decodifica igual em qualquer charset; bytes que formam UTF-8 válido são lidos como UTF-8; o resto é lido como ISO-8859-1, o antigo padrão dos headers HTTP. Latin-1 aqui significa ISO-8859-1 de verdade. O Windows-1252 difere dele na faixa 0x80–0x9F, onde ficam caracteres como €, então uma senha em Windows-1252 pode aparecer como caracteres de controle.
O decodificador é tolerante com tokens malfeitos, como preenchimento = ausente ou - e _ URL-safe, e avisa, porque servidores rígidos os rejeitariam. Se a decodificação der um texto sem nenhum dois-pontos, o valor não era um par user:password, e a ferramenta informa isso.
Onde aparecem credenciais Basic
- Ferramentas de desenvolvedor do navegador. A aba Network mostra os headers de cada requisição, incluindo
Authorization. - curl.
curl -vimprime a requisição, então-u user:passaparece como> Authorization: Basic …. - Arquivos HAR e capturas de proxy, que guardam os headers completos de cada requisição.
- Configurações de servidor e proxy, em que um header fixo dá acesso a um backend, por exemplo
proxy_set_header Authorization "Basic …"no nginx. - Credenciais de registry Docker. O campo
authem~/.docker/config.jsoné o Base64 deuser:password; o decodificador de dockerconfigjson abre o arquivo inteiro. - Logs de aplicação, quando um framework registra os headers recebidos sem mascarar.
Cada um desses é uma senha em texto puro com uma camada de codificação, então trate-o como a própria senha. Base64 não é criptografia explica por que a codificação não protege nada.
Como decodificar o header no servidor
Frameworks normalmente fazem isso por você, mas um parser pequeno é útil em scripts e testes:
import base64
def parse_basic(header_value):
scheme, _, token = header_value.strip().partition(" ")
if scheme.lower() != "basic":
raise ValueError("not a Basic credential")
user, colon, password = base64.b64decode(token).decode("utf-8").partition(":")
if not colon:
raise ValueError("no colon in the decoded value")
return user, password
print(parse_basic("Basic YWRtaW46czNjcjN0OnBhc3M="))
Ele imprime ('admin', 's3cr3t:pass'). O nome do esquema não diferencia maiúsculas de minúsculas, então compare em minúsculas, e use sempre partition ou split(":", 1) para que um dois-pontos na senha sobreviva. Verifique a senha com uma comparação de tempo constante, por exemplo hmac.compare_digest sobre os bytes codificados, em vez de ==. Para a direção inversa, use o gerador de header Basic Auth; mais receitas de Base64 na página de Python.
Perguntas frequentes
Como decodificar um token de Basic auth à mão?
Tire a palavra Basic e o espaço, decodifique o resto em Base64 e divida no primeiro dois-pontos. No Linux ou no macOS, echo 'YWRtaW46czNjcjN0OnBhc3M=' | base64 -d imprime admin:s3cr3t:pass.
O que significa "Isto é um token Bearer"?
O header usa o esquema Bearer, então carrega um token em vez de usuário e senha. Tokens Bearer costumam ser JWTs; abra-os no decodificador de JWT.
Por que a senha decodificada tem um símbolo estranho?
Os bytes provavelmente foram gravados em um charset diferente do usado para lê-los. Alterne o Charset entre Detectar automaticamente, UTF-8 e ISO-8859-1 e confira os bytes em hex: C2 A3 é £ em UTF-8, enquanto um A3 sozinho é £ em Latin-1.
Encontrei um header de Basic auth em um log. O que fazer?
Considere a senha vazada e troque-a. Depois feche o vazamento: configure o proxy, o servidor web ou a biblioteca de log para mascarar o header Authorization.