J'écris une application nodejs que je voudrais utiliser à la fois comme application Web et comme fournisseur d'API. Une fois qu'un utilisateur est authentifié, je souhaite lui attribuer un jeton à utiliser pour les demandes suivantes. Cela fonctionne très bien avec un passeport pour l'application Web, car je viens de sérialiser et de désérialiser l'utilisateur avec le jeton dans la session. Toutefois, lors de la réponse aux demandes d'API, aucun cookie ne doit être défini pour stocker les informations de session. Idéalement, le passeport recherchera le jeton en session et le corps de la demande. Y a-t-il un moyen de configurer le passeport pour accomplir ceci?
Utilisez simplement le jeton d'accès à chaque demande. L'utilisation d'une session n'est pas nécessaire. Voici le flux de travail:
POST /signin
/signin
.Lorsque le client reçoit le jeton d'accès du serveur d'autorisation, il peut alors adresser des demandes aux ressources protégées du serveur. Par exemple:
GET /api/v1/somefunction?token='abcedf'
Références
Créez une API sécurisée oauth avec passport.js et express.js (node.js)
Comme le mentionne bnuhero, vous n'avez pas besoin de sessions (même si cette approche a aussi ses mérites). Voici un projet de plaque chauffante que je lance pour cela: https://github.com/roblevintennis/passport-api-tokens
Voici une alternative facile à suivre (mais elle utilise des sessions). Peut-être une belle référence croisée: http://scotch.io/tutorials/javascript/easy-node-authentication-setup-and-local
Et une autre référence liée: http://mherman.org/blog/2013/11/11/user-authentication-with-passport-dot-js/
Vous pouvez utiliser la méthode isAuthenticated () dans passport dans nodejs. Sur chaque route, vous pouvez vérifier si (req.isAuthenticated ()) et s’il est déjà authentifié, il vous permettra d’accéder à la route ou vous pourrez rediriger ou exécuter toute autre exécution dans un autre bloc. Dans Passport, vous pouvez retourner done (null, utilisateur) pour une connexion réussie et les données seront stockées dans le cookie jusqu'à la fin de la session. dans l'utilisateur, vous pouvez obtenir des informations sur l'utilisateur, telles que l'adresse électronique, le mot de passe.
app.get('/home', (req, res) =>{
if(req.isAuthenticated()){
//render home page
} else {
// go back to the login page or throw soome error
}
})