web-dev-qa-db-fra.com

Est-il possible de stocker les informations d'identification de l'utilisateur dans le JWT?

Est-il possible de stocker les informations d'identification de l'utilisateur (nom d'utilisateur/mot de passe) dans le fichier JWT (donc sign et verify le jeton obtenu plus tard)?

I entendu que

Non, l'envoi d'un mot de passe dans un fichier JWT n'est pas sécurisé. En effet, les revendications JWT sont simplement codées et peuvent facilement être décodées par quiconque les Les voit. Il n’est pas sécurisé de stocker des informations sensibles dans un fichier JWT Qui est retourné à un utilisateur.

mais je ne sais pas pourquoi le site Web de JWT recommande l’utiliser à des fins d’authentification alors:

Quand devriez-vous utiliser les jetons Web JSON?

Voici quelques scénarios dans lesquels les jetons Web JSON sont utiles:

Authentification: il s’agit du scénario le plus courant d’utilisation de JWT. Une fois que Est connecté, chaque requête suivante inclut le JWT, Lui permettant d'accéder aux itinéraires, services et ressources autorisés à Avec ce jeton. Single Sign On est une fonctionnalité qui utilise largement JWT de nos jours, en raison de son faible coût et de sa capacité à Être facilement utilisé dans différents domaines.

6
FrozenHeart

Le JWT est le résultat de l'authentification. Par exemple 

  1. L'utilisateur envoie ses informations d'identification (nom d'utilisateur/mot de passe, par exemple) à un service d'authentification. Il peut s'agir d'un tiers, de votre monolithe ou de vos propres microservices dédiés à l'authentification.
  2. Le service valide le nom d'utilisateur-mot de passe. Si l’authentification réussit, il retourne un JWT qui indique que l’utilisateur est déjà authentifié, c’est-à-dire qui le prétend. Ce JWT pourrait contenir une charge utile sans informations sensibles (ne stockez pas le mot de passe ici).
  3. L'utilisateur envoie une autre demande à une entreprise de service avec le JWT. Si le JWT n'est pas expiré et n'est pas corrompu (le signe est toujours valide), le service peut faire confiance à son JWT. Peut-être que cette tâche sera déléguée à un service d'autorisation.

Qu'y a-t-il dans le jeton JWT?

Eh bien, le JWT le plus simple contient des informations sur le signe (je ne peux pas entrer beaucoup de détails ici car je ne suis pas un expert en sécurité) qui permettent de vérifier si le signe a été corrompu lors de la réception d'une demande avec le JWT.

Cette information peut être vérifiée et approuvée car elle est signée numériquement

En outre, le JWT permet d’envoyer une charge utile.

Plus formellement, le JWT est composé de:

  • En-tête: type du jeton + algorithme de hachage utilisé
  • Données utiles: Les revendications sont des déclarations sur une entité (généralement l'utilisateur) et des métadonnées supplémentaires.
  • Signature: La signature est utilisée pour vérifier que l'expéditeur du JWT est bien ce qu'il dit et pour s'assurer que le message n'a pas été modifié en cours de route.

Par exemple, si j'envoie une demande à un service d'authentification avec mes identifiants nom d'utilisateur: password étant gabriel: giussi, il vérifiera ces identifiants et, s'ils sont corrects, le JWT suivant pourrait être créé.  enter image description here

Ensuite, avec chaque demande, je vais alors le JWT codé qui contient mon nom d'utilisateur et le service

  • Exécutez l'autorisation (Qu'est-ce que Gabriel est autorisé à faire?) Si le signe JWT est valide.
  • Me demander de me reconnecter si le JWT a expiré
  • Retourne une erreur d'authentification si le signe est cassé.
8
gabrielgiussi

Vous devez utiliser jwt uniquement pour stocker un jeton consommé par votre API. Le jeton sera généré après une connexion réussie. Il peut être attaché à toute demande envoyée à votre API. Toute demande ne doit être traitée que si le jeton est valide.