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êteProxy-Authenticatequi nomme le schéma à utiliser, tel queBasic. - Nouvelle tentative : Le client répète la demande avec un en-tête
Proxy-Authorizationqui contient ses identifiants, par exempleProxy-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-Authorizations'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%40et un deux-points comme%3a.