Comment décoder un en-tête Basic auth
- Collez la valeur dans En-tête Authorization, jeton Basic ou URL avec identifiants. Toutes ces formes fonctionnent :
Authorization: Basic YWRtaW46czNjcjN0OnBhc3M=Proxy-Authorization: Basic …Basic YWRtaW46czNjcjN0OnBhc3M=ou le jeton seulhttps://user:password@host/path
- Laissez Jeu de caractères sur Auto, ou forcez UTF-8 ou ISO-8859-1 si le résultat semble faux.
- Lisez Nom d’utilisateur et Mot de passe, copiez l’un ou l’autre, et vérifiez Octets décodés (hex) quand un caractère paraît suspect.
Seul le schéma Basic est décodé. Les en-têtes Digest et NTLM ont un autre format et seront signalés comme un autre schéma.
Ce qu’affiche le décodeur
| Entrée | Nom d’utilisateur | Mot de passe | Remarque |
|---|---|---|---|
Basic YWRtaW46czNjcjN0OnBhc3M= | admin | s3cr3t:pass | Seul le premier deux-points sépare ; le mot de passe garde son deux-points. |
dGVzdDoxMjOj | test | 123£ | Pas de l’UTF-8 valide : Auto se rabat donc sur le Latin-1. |
dGVzdDoxMjPCow== | test | 123£ | Même texte, octets UTF-8. |
https://ci-bot:p%40ss@ci.example.com/ | ci-bot | p@ss | Extrait de l’URL et décodé en pourcent. |
Bearer eyJhbGciOi… | Erreur : un jeton Bearer, avec un lien vers le décodeur JWT. |
La détection automatique procède dans l’ordre. L’ASCII pur se décode de la même façon dans tous les jeux de caractères ; les octets qui forment de l’UTF-8 valide sont lus en UTF-8 ; tout le reste est lu en ISO-8859-1, l’ancien encodage par défaut des en-têtes HTTP. Latin-1 désigne ici le vrai ISO-8859-1. Windows-1252 en diffère dans la plage 0x80–0x9F, où se trouvent des caractères comme € : un mot de passe en Windows-1252 peut donc apparaître sous forme de caractères de contrôle.
Le décodeur tolère les jetons approximatifs, avec un remplissage = manquant ou des - et _ URL-safe, et le signale, car les serveurs stricts les rejetteraient. Si le décodage donne un texte sans aucun deux-points, la valeur n’était pas une paire user:password, et l’outil l’indique.
Où l’on trouve des identifiants Basic
- Outils de développement du navigateur. L’onglet Réseau affiche les en-têtes de chaque requête,
Authorizationcompris. - curl.
curl -vaffiche la requête :-u user:passapparaît donc sous la forme> Authorization: Basic …. - Fichiers HAR et captures de proxy, qui stockent les en-têtes complets de chaque requête.
- Configurations de serveurs et de proxys, où un en-tête codé en dur donne accès à un backend, par exemple
proxy_set_header Authorization "Basic …"dans nginx. - Identifiants de registre Docker. Le champ
authde~/.docker/config.jsonest le Base64 deuser:password; le décodeur dockerconfigjson ouvre le fichier entier. - Journaux d’application, quand un framework journalise les en-têtes entrants sans les masquer.
Chacun de ces cas est un mot de passe en clair avec une seule couche d’encodage : traitez-le comme le mot de passe lui-même. Le Base64 n’est pas un chiffrement explique pourquoi l’encodage ne protège rien.
Décoder l’en-tête côté serveur
Les frameworks le font normalement pour vous, mais un petit parseur est utile dans les scripts et les tests :
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="))
Le script affiche ('admin', 's3cr3t:pass'). Le nom du schéma est insensible à la casse : comparez-le en minuscules, et utilisez toujours partition ou split(":", 1) pour qu’un deux-points dans le mot de passe soit préservé. Vérifiez le mot de passe avec une comparaison en temps constant, par exemple hmac.compare_digest sur les octets encodés, plutôt qu’avec ==. Pour le sens inverse, utilisez le générateur d’en-tête Basic Auth ; d’autres recettes Base64 se trouvent sur la page Python.
FAQ
Comment décoder un jeton Basic auth à la main ?
Retirez le mot Basic et l’espace, décodez le reste en Base64 et coupez au premier deux-points. Sous Linux ou macOS : echo 'YWRtaW46czNjcjN0OnBhc3M=' | base64 -d affiche admin:s3cr3t:pass.
Que signifie « C'est un jeton Bearer » ?
L’en-tête utilise le schéma Bearer : il transporte un jeton plutôt qu’un nom d’utilisateur et un mot de passe. Les jetons Bearer sont souvent des JWT ; ouvrez-les dans le décodeur JWT.
Pourquoi le mot de passe décodé contient-il un symbole bizarre ?
Les octets ont probablement été écrits dans un autre jeu de caractères que celui utilisé pour les lire. Basculez Jeu de caractères entre Auto, UTF-8 et ISO-8859-1, et vérifiez les octets hex : C2 A3 est £ en UTF-8, alors qu’un A3 seul est £ en Latin-1.
J'ai trouvé un en-tête Basic auth dans un journal. Que faire ?
Considérez le mot de passe comme divulgué et changez-le. Puis colmatez la fuite : configurez le proxy, le serveur web ou la bibliothèque de journalisation pour masquer l’en-tête Authorization.