401 Unauthorized

L’authentification est absente ou invalide.

Quand l’utiliser

Jeton absent ou expiré. Malgré son nom, ce code signifie « non authentifié ».

Causes courantes et solutions

Causes habituelles : pas d’en-tête Authorization, un en-tête mal formé comme un jeton sans le préfixe Bearer, un jeton d’accès expiré, un jeton émis pour un autre environnement ou une autre audience, ou un décalage d’horloge qui fait paraître un JWT expiré ou pas encore valide. Décodez le JWT et vérifiez exp, nbf, aud et iss. Un 401 correct inclut WWW-Authenticate, qui nomme le schéma attendu par le serveur.

Les clients doivent rafraîchir le jeton une fois et réessayer, sans boucler. Les en-têtes se perdent en chemin : les navigateurs et curl suppriment Authorization lors d’une redirection vers un autre hôte, et Apache avec PHP-FPM ou CGI le retire sauf si CGIPassAuth On est défini. Si une requête preflight CORS échoue avec un 401, votre serveur exige une authentification sur OPTIONS ; les preflights ne portent jamais d’identifiants, laissez-les donc passer. Utilisez 403 quand l’utilisateur est connu mais n’a pas la permission.

Erreur client (4xx)

Les codes 4xx sont des erreurs client : la requête elle-même est incorrecte, non autorisée ou vise quelque chose qui n’existe pas. Renvoyer la même requête ne servira à rien.

À quoi ça ressemble

HTTP/1.1 401 Unauthorized

Comment l’envoyer

Node.js / Expressres.status(401).end()
Python / Flaskreturn '', 401
nginxreturn 401;

Comment le vérifier

curl -s -o /dev/null -w "%{http_code}\n" https://example.com/

Ouvrir l’outil Codes de statut HTTP