L'authentification par proxy est la vérification qu'un serveur proxy effectue pour confirmer qu'un client est autorisé à l'utiliser avant de transmettre tout trafic. Le client prouve son identité avec des identifiants, tels qu'un nom d'utilisateur et un mot de passe, ou en se connectant depuis une adresse IP approuvée. Si la vérification échoue, le proxy refuse la demande. Sur HTTP, un proxy qui nécessite des identifiants répond avec un code d'état 407.

Nom d'utilisateur/Mot de passe vs. Liste blanche d'IP

  • Authentification nom d'utilisateur/mot de passe envoie les identifiants dans l'en-tête Proxy-Authorization, donc elle ne dépend pas de l'adresse IP du client.
  • Liste blanche d'IP autorise des IP sources ou des sous-réseaux spécifiques sans identifiants, donc les demandes provenant de toute autre IP sont refusées.

Comment fonctionne le défi 407

  • Défi : Un proxy qui nécessite des identifiants répond à une demande non authentifiée avec 407 Proxy Authentication Required. La réponse doit inclure un en-tête Proxy-Authenticate qui nomme le schéma à utiliser, tel que Basic.
  • Nouvelle tentative : Le client répète la demande avec un en-tête Proxy-Authorization qui contient ses identifiants, par exemple Proxy-Authorization: Basic <credentials>.
  • 407 vs. 401 : Un 407 fonctionne comme un 401 Non autorisé, mais cela signifie que le proxy a besoin d'identifiants, pas le site web.
  • Portée : Proxy-Authorization s'applique uniquement au proxy qui l'a demandé. Dans une chaîne de proxies, le premier proxy qui attend des identifiants consomme l'en-tête.

Garder les identifiants du proxy sécurisés

  • Basic n'est pas un cryptage : Le schéma Basic ne fait que coder en base64 username:password. Le base64 est réversible, donc cela équivaut à envoyer les identifiants en texte clair.
  • Préférer les connexions chiffrées : MDN recommande HTTPS chaque fois que l'authentification est utilisée, et surtout avec Basic. Certains clients, comme curl, peuvent se connecter au proxy lui-même via TLS avec une URL de proxy https://.
  • Encoder les caractères spéciaux : curl décode l'URL du nom d'utilisateur et du mot de passe dans une chaîne de proxy, donc un mot de passe contenant @ doit être écrit comme %40 et un deux-points comme %3a.

Termes associés