web-dev-qa-db-fra.com

Rôles utilisant JWT

Je suis nouveau chez JWT. J'ai étudié un peu le JWT et j'ai compris qu'il est encadré comme "header.claims.signature".

Considérez un scénario simple comme suit:

  • Un client s'authentifie
  • Le client peut avoir (un ou plusieurs) rôles d'administrateur, membre, enregistré, invité
  • Le serveur ne maintient aucune session (et dépend uniquement de JWT pour l'authentification/l'autorisation)

Une fois authentifié, le serveur trouve le type de client et je suppose que le customerId et les rôles feront partie des "revendications" dans JWT. Faites-moi savoir si mon hypothèse est incorrecte (ou contraire à la norme).

La partie "revendications" de JWT n'est pas chiffrée (juste codée). Cela expose une faille de sécurité facile, où le consommateur (de service) peut simplement modifier la partie "revendications" de JWT et renvoyer la même chose avec plus de rôles (pour lesquels le client/consommateur n'est pas autorisé à).

Si ma compréhension/hypothèse est incorrecte, comment pouvons-nous atteindre ce que je cible?

29
user203687

Lors de l'utilisation de JWS (header.claims.signature), la partie "revendications" du JWT est protégée par l'intégrité par la signature. Donc, si les "revendications" ou toute autre partie du JWT sont modifiées par quelqu'un sans la clé appropriée, la vérification de signature sur le JWT échouera et le jeton doit être rejeté.

29
Brian Campbell

La partie claims de JWT peut être vérifiée, mais un autre problème lors de l'ajout de quelque chose comme des rôles à claims est le cas lorsque vous modifiez des rôles utilisateur, mais l'ancien jeton contient toujours les rôles précédents attribués à la utilisateur. Soyez donc prudent à ce sujet. Vous pouvez simplement conserver l'identifiant de l'utilisateur dans le jeton et récupérer toute autre information associée à l'utilisateur en fonction de votre mécanisme de persistance (bases de données ou autre).

9
Hamid Mohayeji

Une autre option consiste à rechercher l'utilisateur dans une base de données lors de l'authentification, sur la base d'un identifiant d'utilisateur inclus dans le jeton, pour vérifier les rôles ou d'autres aspects de leur identité non inclus dans le JWT.

Cependant, toute information incluse dans le JWT est vérifiée via la signature comme indiqué précédemment, vous pouvez donc également vous fier à ce qui est dans le JWT si nécessaire.

3
Control Complex