Je suis tellement content de le savoir parce que j'ai mon système d'enregistrement/d'authentification de base en cours.
donc en gros j'ai eu ceci:
app.post('/login', function(req,res) {
Users.findOne({
email: req.body.email
}, function(err, user) {
if(err) throw err;
if(!user) {
res.send({success: false, message: 'Authentication Failed, User not found.'});
} else {
//Check passwords
checkingPassword(req.body.password, user.password, function(err, isMatch) {
if(isMatch && !err) {
//Create token
var token = jwt.sign(user,db.secret, {
expiresIn: 1008000
});
res.json({success: true, jwtToken: "JWT "+token});
} else {
res.json({success: false, message: 'Authentication failed, wrong password buddy'});
}
});
}
});
});
Ensuite, je sécurise mes routes/admin et avec POSTMAN chaque fois que j'envoie une demande get avec le jwt dans l'en-tête, tout fonctionne parfaitement.
Maintenant, voici la partie délicate, essentiellement lorsque je vais me connecter si cela réussit, puis redirige-moi vers la page d'administration, et chaque fois que j'essaie d'accéder aux routes admin/*, je veux envoyer au serveur mon jwToken mais le problème est , comment puis-je y parvenir? Je n'utilise pas redux/flux, j'utilise simplement react/react-router.
Je ne sais pas comment fonctionne le mécanicien.
Merci les gars
1- Le composant de connexion envoie une demande de connexion au point de terminaison du serveur API
2- Le point de terminaison de l'API serveur renvoie un jeton
3- Je sauvegarde le token dans le localStorage de l'utilisateur
4- Tous les appels API auront désormais dans l'en-tête
Exemple: https://github.com/joshgeller/react-redux-jwt-auth-example
Ne stockez pas le jeton dans localStorage, le jeton peut être compromis à l'aide d'une attaque xss. Je pense que la meilleure solution sera de fournir à la fois un jeton d'accès et un jeton d'actualisation au client lors de la connexion. enregistrez le jeton d'accès en mémoire (par exemple, état redux) et le jeton d'actualisation doit être créé sur le serveur avec l'indicateur httpOnly (et également l'indicateur sécurisé si possible). Le jeton d'accès doit être défini pour expirer toutes les 2-3 minutes. Afin de s'assurer que l'utilisateur n'aura pas à entrer ses informations d'identification toutes les 2-3 minutes, j'ai un intervalle qui appelle le /refreshToken
point de terminaison avant l'expiration du jeton en cours (jeton d'actualisation silencieux).
de cette façon, le jeton d'accès ne peut pas être compromis à l'aide de xss/csrf. mais en utilisant une attaque xss, l'attaquant peut appeler en votre nom le /refreshToken
endpoint, mais cela ne sera pas dangereux car le jeton retourné ne peut pas être compromis.