web-dev-qa-db-fra.com

Jeton d'authentification de passeport de nodejs

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?

70
Austin

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
  1. Le nom d'utilisateur et le mot de passe sont publiés dans la demande du client.
  2. Le serveur authentifie l'utilisateur à l'aide de la stratégie locale du passeport. Voir passport-local .
  3. Si les informations d'identification représentent un utilisateur valide, le serveur renvoie le jeton d'accès généré par un générateur. node-jwt-simple est un bon choix.
  4. Si les informations d'identification ne sont pas valides, rediriger vers /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'

  1. Le client appelle une API de serveur avec l'argument de jeton.
  2. Le serveur authentifie le jeton en utilisant la stratégie de support du passeport. Voir passport-http-bearer .

Références

Créez une API sécurisée oauth avec passport.js et express.js (node.js)

128
bnuhero

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/

7
Rob

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
    }
}) 
0
Anuj Kumar