Oubliez everyauth. Cette bibliothèque est une surcharge, à mon avis. L'implémentation de l'authentification est assez simple en fait, suivez le schéma :
- Passes d'utilisateur
username
y password
au serveur ;
- Le serveur reçoit
username
y password
et vérifie dans la base de données s'il existe un utilisateur avec ce nom. password
. S'il n'y a pas d'utilisateur, répondez simplement par une erreur ;
- Nous avons un utilisateur, utilisons maintenant le mécanisme de session intégré d'Express. Appelez
req.session.regenerate
et dans le callback faire req.session.userID = user.id
. Express enverra automatiquement le cookie à l'utilisateur ;
- Créez un middleware (qui doit déclencher avant tout autre gestionnaire de demande), qui recherche essentiellement dans la base de données des
req.session.userID
. S'il en trouve un, il le stocke dans req
c'est-à-dire req.user = user
;
- Dans une vue, vous vérifiez simplement si
req.user
est définie. Si elle l'est, alors nous sommes authentifiés. Et c'est fini !
ad 1+2) Pour rendre l'authentification sûre, vous devriez utiliser une certaine cryptographie (et/ou HTTPS). Par exemple, le mot de passe devrait être conservé dans la base de données en deux parties : salt
y hash
. salt
est généré de manière aléatoire (au moment de l'enregistrement) et hash = hash_it(pwd, salt)
, donde hash_it
est un algorithme de hachage (par exemple : MD5 ou SHA256).
L'authentification côté client peut maintenant se faire en plusieurs étapes (uniquement si vous savez utiliser JavaScript) :
- Le serveur envoie des données aléatoires
new_salt
à la page de connexion (ou en générer un en JavaScript, il n'est pas nécessaire de cacher l'algorithme de génération) ;
- L'utilisateur envoie une demande AJAX
give me salt for user X
et le serveur répond avec le salt
stockée dans la BD (la salt
est publique) ;
- Sur le hachage de la réponse
pwd
avec salt
puis hacher à nouveau le résultat avec new_salt
et le stocker dans la variable hpwd
;
- Le client envoie
username
, hpwd
y new_salt
au serveur ;
- Le serveur reçoit
pwd
de DB pour username
, hashs pwd
avec new_salt
et compare le résultat à hpwd
(note : vous ne stockez pas new_salt
).
Cette méthode est intéressante, car à chaque fois que vous vous connectez, des données aléatoires (du point de vue externe) circulent à travers le réseau, même si l'option username
y el password
est le même.
C'est important, car password
La fuite est une chose sérieuse. Pas parce que quelqu'un peut casser le compte de votre application (c'est un dommage mineur, à moins que vous ne soyez une banque - mais alors vous ne poseriez pas de telles questions :D ). C'est surtout parce que les gens ont tendance à utiliser les mêmes mots de passe pour plusieurs sites, y compris les comptes bancaires.