La semaine dernière, dans l'article "Création d'un serveur Node.js Http", j'ai introduit les bases de HTTP dans Node.js. L'article d'aujourd'hui vous montrera comment utiliser l'authentification HTTP pour protéger votre site Node.js contre les attaques de mot de passe. Nous introduirons d'abord l'authentification de l'accès de base, puis passerons à une authentification d'accès à digestion plus sécurisée.
Points clés
htpasswd
est utilisé pour gérer les fichiers de mot de passe dans l'authentification de base de l'accès, tandis que l'utilitaire est utilisé pour digérer l'authentification de l'accès. Les mots de passe sont stockés dans le fichier de mot de passe côté serveur, et le module htdigest
est utilisé pour ajouter la prise en charge d'authentification au serveur HTTP. http-auth
express-basic-auth
Authentification d'accès de base
Lorsqu'un utilisateur accède à un site qui met en œuvre l'authentification, le système l'invitera à entrer son nom d'utilisateur et son mot de passe. Si l'utilisateur fournit des informations d'identification valides, il sera apporté au contenu de la page, sinon il sera refusé avec une réponse "401 non autorisée". Le type le plus simple d'authentification HTTP est l'authentification de base de l'accès.Fichier de mot de passe
peut être utilisé pour gérer les fichiers de mot de passe. Pour installer htpasswd
, utilisez la commande suivante. htpasswd
signifie le gestionnaire de package Node.js, qui est installé par défaut avec node.js. npm
utilisé pour installer le module Node.js. npm
Frappe le package d'installation global, ce qui signifie qu'il est inclus dans la variable de chemin du système. -g
npm install -g htpasswd
, vous pouvez créer un nouvel utilisateur à l'aide de la commande suivante. Cet exemple utilise l'indicateur htpasswd
pour créer un nouveau fichier de mot de passe nommé "htpasswd". Dans le nouveau fichier, ajoutez un utilisateur nommé "FOO". L'indicateur -c
permet de spécifier le mot de passe "bar" dans le cadre de la ligne de commande. -b
htpasswd -bc htpasswd foo bar
<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>
à l'aide de la commande NPM suivante. http-auth
npm install -g htpasswd
Ensuite, créez un nouveau fichier appelé "Basic_Auth_Server.js" et ajoutez le code suivant. Notez que le module http-auth
est référencé à la ligne 2. Dans les lignes 3 à 7, passez l'objet de configuration au module d'authentification. Le champ authRealm
définit le domaine d'authentification. Le champ authFile
pointe vers le fichier de mot de passe que nous avons créé plus tôt. __dirname
fait référence au répertoire où se trouve le script en cours d'exécution. Cet exemple suppose que le fichier "htpasswd" est dans le même répertoire que "Basic_Auth_Server.js". Le champ de configuration authType
indique le type d'authentification à utiliser. Dans la ligne 9, le schéma d'authentification de base est appliqué à la connexion HTTP. La fonction de rappel d'authentification fournit un nom d'utilisateur authentifié pour un traitement ultérieur.
htpasswd -bc htpasswd foo bar
Enfin, démarrez le serveur. Vous pouvez vous connecter au serveur en naviguant vers https://www.php.cn/link/bb122c8fe6c764e8aae555e2186a6344 . Vous serez invité à saisir votre nom d'utilisateur et votre mot de passe. Fournissez les informations d'identification que vous avez créées plus tôt et le navigateur vous dira bonjour par son nom.
Le plus grand inconvénient de l'authentification de l'accès de base est que les informations d'identification sont envoyées sur le réseau sous forme de texte brut. Pour éviter les écoutes, une telle authentification ne peut être utilisée qu'avec des connexions sécurisées (c'est-à-dire HTTPS). Si une connexion sécurisée n'est pas disponible, vous devez utiliser une forme d'authentification plus sécurisée à la place.
Disser l'authentification de l'accès
L'authentification de l'accès numérique est une alternative plus sécurisée à l'authentification de base. Avec l'authentification Digest, le mot de passe est chiffré avant la transmission du réseau.
Digit L'authentification utilise également des fichiers de mot de passe. Cependant, le format de fichier est légèrement différent de celui utilisé dans l'authentification de base. Pour utiliser le format de fichier de mot de passe Digest, nous utiliserons un autre utilitaire appelé htdigest
. Utilisez la commande NPM suivante pour installer htdigest
.
<code>foo:{SHA}Ys23Ag/5IOWqZCw9QGaVDdHwH00=</code>
Ensuite, utilisez la commande suivante pour créer un nouveau fichier de mot de passe. De même, l'indicateur -c
est utilisé pour créer un nouveau fichier de mot de passe nommé "htpasswd". Cette fois, nous devons également spécifier un champ d'authentification. Dans ce cas, le champ d'authentification est "zone privée". Dans cet exemple, le nom d'utilisateur est à nouveau "foo". Veuillez noter que le mot de passe n'est pas fourni dans la commande. Après être entré dans la commande, vous serez invité à fournir votre mot de passe.
npm install http-auth
Après avoir exécuté htdigest
, vérifiez le nouveau fichier "htpasswd". L'entrée pour "FOO" est indiquée ci-dessous. Le fichier d'authentification Digest contient le nom d'utilisateur et le mot de passe chiffré, ainsi que le domaine d'authentification non inclus dans le fichier d'authentification de base.
npm install -g htpasswd
Pour intégrer l'authentification Digest dans notre serveur, nous utiliserons à nouveau le module http-auth
. Si vous avez suivi ce tutoriel, le module doit déjà être installé sur votre machine. Ensuite, créez un nouveau fichier appelé "digest_auth_server.js" pour implémenter votre serveur. Le code du serveur est affiché ci-dessous. Notez que le code du serveur est presque le même que le code de serveur d'authentification de base. La différence est le champ authType
de l'objet de configuration. Dans ce cas, authType
est défini sur "Digest". Ce serveur est accessible comme un serveur d'authentification de base.
htpasswd -bc htpasswd foo bar
Conclusion
Cet article présente les bases de l'authentification HTTP. En suivant les exemples fournis ici, votre application Node.js peut être un peu plus sûre. Cependant, vous devez savoir que l'authentification seule ne suffit pas. Si la sécurité est le principal problème, votre site doit être servi via HTTPS. Dans un prochain article, j'explorerai HTTPS et de nombreuses autres fonctionnalités Great Node.js. Si vous avez aimé cet article, vous voudrez tout savoir sur la dernière collection de saut de saut imprimé et de livres électroniques de SitePoint. Le premier livre est "Node.js" de Don Nguyen - en savoir plus sur SitePoint!
(Ce qui suit est la partie FAQ. En raison de la durée de l'article, je résumerai la partie FAQ pour conserver les informations de base et éviter la duplication et la redondance.)
FAQ (FAQ) sur l'authentification HTTP dans node.js
Comment implémenter l'authentification HTTP à l'aide d'express.js dans node.js? Utiliser express-basic-auth
middleware. L'exemple de code montre comment s'authentifier avec un nom d'utilisateur et un mot de passe.
Comment protéger mon application Node.js à l'aide de l'authentification HTTP? Utilisez le module http-auth
et spécifiez le chemin du fichier de mot de passe. Assurez-vous d'utiliser HTTPS pour améliorer la sécurité.
Comment utiliser l'authentification HTTP pour gérer plusieurs utilisateurs? Utilisez un fichier ou une base de données pour stocker le nom d'utilisateur et le mot de passe. Le module http-auth
prend en charge cette fonction.
Comment personnaliser les invites d'authentification HTTP dans Node.js? Définissez l'option realm
.
Comment gérer l'échec de l'authentification dans Node.js? Le serveur enverra une réponse 401 non autorisée. Vous pouvez personnaliser cette réponse.
Comment utiliser l'authentification HTTP avec HTTPS? Créez un serveur HTTPS au lieu d'un serveur HTTP.
Comment utiliser l'authentification HTTP avec des cookies? Définissez des cookies après une authentification réussie.
Comment utiliser l'authentification HTTP avec une session? Utiliser le middleware de session, comme express-session
.
Comment utiliser l'authentification HTTP avec JSON Web Token (JWT)? Utilisez JWT Middleware, par exemple express-jwt
.
Comment utiliser l'authentification HTTP avec OAuth? Utilisez le middleware OAuth, par exemple passport
.
En bref, ce qui précède résume brièvement le contenu central de la partie FAQ et effectue un traitement pseudo-original sur le texte d'origine. Tous les liens d'image sont restés inchangés.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!