Jeton de support dauthentification de base
HTTP fournit un cadre général pour le contrôle d’accès et l’authentification. Cette page est une introduction au cadre HTTP pour l’authentification et montre comment restreindre l’accès à votre serveur à l’aide du schéma HTTP « Basic ».
Le cadre général d’authentification HTTP
RFC 7235 définit le cadre d’authentification HTTP, qui peut être utilisé par un serveur pour contester une demande client et par un client pour fournir des informations d’authentification.
Le flux de défis et de réponses fonctionne comme suit :
- le serveur répond à un client avec un statut de réponse (non autorisé) et fournit des informations sur la façon d’autoriser avec un en-tête de réponse contenant au moins un défi.
- Un client qui souhaite s’authentifier auprès du serveur peut alors le faire en incluant un en-tête de requête avec le Pouvoirs.
- Habituellement, un client présente un mot de passe à l’utilisateur, puis émet la demande avec l’en-tête correct.
Le flux général de messages ci-dessus est le même pour la plupart (sinon tous) des schémas d’authentification. Les informations réelles dans les en-têtes et la façon dont elles sont encodées changent !
Attention : Le schéma d’authentification « Basic » utilisé dans le schéma ci-dessus envoie les identifiants encodés mais non chiffrés. Cela ne serait pas du tout sécurisé à moins que l’échange ne se fasse via une connexion sécurisée (HTTPS/TLS).
Authentification proxy
Le même mécanisme de défi et de réponse peut être utilisé pour l’authentification proxy . Étant donné que l’authentification des ressources et l’authentification par proxy peuvent coexister, un ensemble différent d’en-têtes et de codes d’état est nécessaire. Dans le cas des proxys, le code d’état difficile est (Authentification proxy requise), l’en-tête de réponse contient au moins une demande applicable au proxy et l’en-tête de demande est utilisé pour fournir les informations d’identification au serveur proxy.
Si un serveur (proxy) reçoit des informations d’identification non valides, il doit répondre par un ou par un , et l’utilisateur peut envoyer une nouvelle demande ou remplacer le champ d’en-tête.
Si un serveur (proxy) reçoit des informations d’identification valides qui sont inadéquates pour accéder à une ressource donnée, le serveur doit répondre avec le code d’état. Contrairement à ou , l’authentification est impossible pour cet utilisateur et les navigateurs ne proposeront pas de nouvelle tentative.
Dans tous les cas, le serveur peut préférer renvoyer un code d’état, pour cacher l’existence de la page à un utilisateur sans privilèges adéquats ou non correctement authentifié.
Une
faille de sécurité potentielle (qui a depuis été corrigée dans les navigateurs) était l’authentification des images intersites. À partir de Firefox 59, les ressources d’image chargées à partir d’origines différentes vers le document courant ne sont plus en mesure de déclencher des boîtes de dialogue d’authentification HTTP (bogue Firefox 1423146), ce qui empêche le vol des informations d’identification de l’utilisateur si les attaquants parviennent à intégrer une image arbitraire dans une page tierce.
Codage de caractères de l’authentification HTTP
Les navigateurs utilisent le codage pour les noms d’utilisateur et les mots de passe.
Firefox utilisait autrefois , mais a été remplacé par des raisons de parité avec les autres navigateurs et pour éviter les problèmes potentiels, comme décrit dans la 1419658 sur les bogues de Firefox.
En-têtes WWW-Authenticate et Proxy-Authenticate
Les en-têtes et response définissent la méthode d’authentification qui doit être utilisée pour accéder à une ressource. Ils doivent spécifier le schéma d’authentification utilisé, afin que le client qui souhaite autoriser sache comment fournir les informations d’identification.
La syntaxe de ces en-têtes est la suivante :
Ici, se trouve le schéma d’authentification (« Basic » est le schéma le plus courant et présenté ci-dessous). Le terme « domaine » est utilisé pour décrire l’aire protégée ou pour indiquer l’étendue de la protection. Il peut s’agir d’un message tel que « Accès au site de staging » ou similaire, afin que l’utilisateur sache à quel espace il essaie d’accéder.
En-têtes Authorization et Proxy-Authorization
Les en-têtes et request contiennent les informations d’identification permettant d’authentifier un agent utilisateur auprès d’un serveur (proxy). Ici, il est à nouveau nécessaire de le suivre, suivi des informations d’identification, qui peuvent être encodées ou cryptées en fonction du schéma d’authentification utilisé.
authentification schémas
Le cadre général d’authentification HTTP est à la base d’un certain nombre de schémas d’authentification.
L’IANA tient à jour une liste de schémas d’authentification, mais il existe d’autres schémas proposés par les services hôtes, tels qu’Amazon AWS.
Voici quelques schémas d’authentification courants :
-
Basique Voir RFC 7617, informations d’identification encodées en base64. Plus d’informations ci-dessous.
- Bearer
-
Voir RFC 6750, Tokens du porteur pour accéder aux ressources protégées par OAuth 2.0
- Digest
-
Voir RFC 7616. Firefox 93 et versions ultérieures prennent en charge l’algorithme SHA-256. Les versions précédentes ne prennent en charge que le hachage MD5 (non recommandé).
- HOBA
-
Voir RFC 7486, Section 3, H TTP O rigin- B ound A uthentication, basée sur la signature numérique
-
Mutuelle Voir RFC 8120
- Négocier / NTLM
-
Voir RFC4599
- VAPID
-
Voir RFC 8292
- SCRAM
-
Voir RFC 7804
- AWS4-HMAC-SHA256
-
Voir la documentation AWS. Ce schéma est utilisé pour l’authentification du serveur AWS3.
Les schémas peuvent différer en termes de niveau de sécurité et de disponibilité dans les logiciels clients ou serveurs.
Le schéma d’authentification « Basic » offre une sécurité très médiocre, mais est largement pris en charge et Facile à configurer. Il est présenté plus en détail ci-dessous.
Le schéma d’authentification HTTP « de base » est défini dans la RFC 7617, qui transmet les informations d’identification sous forme de paires ID utilisateur/mot de passe, encodées à l’aide de base64.
Sécurité de l’authentification de base
Étant donné que l’ID utilisateur et le mot de passe sont transmis sur le réseau sous forme de texte clair (il est encodé en base64, mais en base64 est un encodage réversible), le schéma d’authentification de base n’est pas sécurisé . HTTPS/TLS doit être utilisé avec l’authentification de base. Sans ces améliorations de sécurité supplémentaires, l’authentification de base ne devrait pas être utilisée pour protéger des informations sensibles ou précieuses.
Restriction de l’accès avec Apache et l’authentification de base
Pour protéger par mot de passe un répertoire sur un serveur Apache, vous aurez besoin d’un et d’un fichier.
Le fichier se présente généralement comme suit :
Le fichier fait référence à un fichier dans lequel chaque ligne se compose d’un nom d’utilisateur et d’un mot de passe séparés par deux points (). Vous ne pouvez pas voir les mots de passe réels car ils sont hachés (à l’aide du hachage basé sur MD5, dans ce cas). Notez que vous pouvez nommer votre fichier différemment si vous le souhaitez, mais gardez à l’esprit que ce fichier ne doit pas être accessible à tout le monde. (Apache est généralement configuré pour empêcher l’accès aux fichiers).
Restreindre l’accès avec Nginx et l’authentification de base
Pour Nginx, vous devrez spécifier un emplacement que vous allez protéger et la directive qui fournit le nom à la zone protégée par mot de passe. La directive pointe ensuite vers un fichier contenant les informations d’identification de l’utilisateur chiffrées, tout comme dans l’exemple Apache ci-dessus.
Accès à l’aide des informations d’identification dans l’URL
De nombreux clients vous permettent également d’éviter l’invite de connexion en en utilisant une URL encodée contenant le nom d’utilisateur et le mot de passe comme suit :
https://username:[email protected]/L’utilisation de ces URL est déconseillée . Dans Chrome, la partie des URL est supprimée des URL de sous-ressource pour des raisons de sécurité. Dans Firefox, il est vérifié si le site nécessite réellement une authentification et si ce n’est pas le cas, Firefox avertira l’utilisateur avec une invite "Vous êtes sur le point de vous connecter au site avec le nom d’utilisateur, mais le site Web ne nécessite pas d’authentification. C’est peut-être une tentative de vous tromper. Dans le cas où le site nécessite une authentification, Firefox demandera toujours la confirmation de l’utilisateur « Vous êtes sur le point de vous connecter au site avec le nom d’utilisateur ». avant d’envoyer les informations d’identification au site. Notez que Firefox envoie la requête sans informations d’identification dans les deux cas avant d’afficher l’invite afin de déterminer si le site nécessite une authentification.