2017-09-11 1 views
0

Je suis confronté à un problème lors de la mise en œuvre de l'autorisation dans ma première application nodejs qui utilise expressjs, sequelize et jsonwebtoken pour l'authentification. Au sein de Je veux interdire/autoriser les routes pour les différents utilisateurs et je ne veux pas utiliser un autre paquet comme oauth2 ou quelque chose qui gère l'autorisation pour moi.Comment gérer Autorisation avec autorisation/rôles en utilisant JWT

Au moment où j'ai créé un jsonwebtoken qui a des rôles d'autorisation inclus dans la charge utile:

{ 
    "userid": 1, 
    "name": "John Doe", 
    "permissions" : ["user_get", "user_post", "user_put"] 
    "iat": 1505142542, 
    "exp": 1505146142 
} 

Non, je veux vérifier dans un appel « GET/utilisateur » si l'utilisateur authentifié est autorisé à appeler il.

Ma question est: Est-il sécuritaire d'utiliser cette approche ou ne devrais-je pas inclure les autorisations dans le jwt? Une autre alternative consiste à demander à la base de données et récupérer l'autorisation au lieu de vérifier la charge utile.

En outre, le jeton sera vérifié s'il est toujours validé au cas où le serveur invaliderait l'utilisateur.

+0

Oui c'est aussi sûr que webtokens. –

Répondre

0

Oui, JWT est très sûr de conserver des données confidentielles.

Pour un paramètre supplémentaire, vous pouvez renouveler le jeton jwt sur chaque requête, donc chaque fois que le client vous envoie un jeton jwt. Chaque requête va vérifier l'utilisateur à l'aide du jeton jwt. Et chaque réponse enverra le client au nouveau jeton jwt pour la prochaine requête.

0

JWT est sûr et bon. Si vous connaissez OAuth2, vous pouvez même implémenter sa version plus simple.

  1. Enregistrer un utilisateur lui donner un ensemble d'informations d'identification supposer un user_id et un mot de passe (Aussi appelé clientid et secret).
  2. Chaque fois que l'utilisateur s'enregistre pour la première fois, renvoyer un JWT avec une heure d'expiration définie comme vous le faites maintenant.
  3. Comme vous l'avez mentionné, utilisez-le pour vérifier les autorisations.
  4. Si JWT expire, l'utilisateur peut en demander un nouveau en spécifiant user_id et password.

Maintenant, ce que je suggère est que si vous ne comptez pas utiliser

"userid": 1, 
"name": "John Doe" 

partout après la validation de l'autorisation de l'utilisateur d'accéder à l'API alors ne pas les garder dans JWT du tout. Au lieu d'utiliser une signature pour votre JWT de cette façon, vous n'avez pas besoin de garder les détails de l'utilisateur sur le réseau. :)