En quoi l'authentification Digest diffère-t-elle de l'authentification de base autre que l'envoi d'informations d'identification sous forme de texte brut?
En quoi l'authentification Digest diffère-t-elle de l'authentification de base autre que l'envoi d'informations d'identification sous forme de texte brut?
Réponses:
La principale différence est qu'il ne nécessite pas l'envoi du nom d'utilisateur et du mot de passe sur le fil en texte brut. Il est également immunisé contre les attaques par rejeu, car il utilise un numéro unique du serveur.
Le serveur donne au client un numéro à usage unique (un nonce) qu'il combine avec le nom d'utilisateur, le domaine, le mot de passe et la demande d'URI. Le client exécute tous ces champs via une méthode de hachage MD5 pour produire une clé de hachage.
Il envoie cette clé de hachage au serveur avec le nom d'utilisateur et le royaume pour tenter de s'authentifier.
Côté serveur, la même méthode est utilisée pour générer une clé de hachage, mais au lieu d'utiliser le mot de passe saisi dans le navigateur, le serveur recherche le mot de passe attendu pour l'utilisateur à partir de sa base de données utilisateur. Il recherche le mot de passe stocké pour ce nom d'utilisateur, passe par le même algorithme et le compare à ce que le client a envoyé. S'ils correspondent, l'accès est accordé, sinon il peut renvoyer un 401 non autorisé (pas de connexion ou échec de connexion) ou un 403 interdit (accès refusé).
L'authentification Digest est normalisée dans la RFC2617 . Il y en a un bel aperçu sur Wikipedia :
Vous pouvez y penser comme ceci:
Un hachage des informations d'identification est envoyé sur le fil.
HA1 = MD5(username:realm:password)
La seule façon d'obtenir le hachage HA1 des informations d'identification est de connaître le mot de passe. Le serveur connaît HA1 mais pas le mot de passe qui l'a généré. Si HA1 était connu d'un attaquant, il pourrait entrer dans le système. Donc, il n'est pas envoyé sur le fil. Un hachage supplémentaire basé sur nonce, etc. est effectué avant de faire cela, et cela doit concorder avec un calcul similaire effectué sur le serveur. Ainsi, tant que le serveur garde HA1 privé, le système est sécurisé.