Jeton Web JSON - pourquoi la charge utile est-elle publique?

30

Je ne comprends pas le raisonnement pour rendre les revendications / charge utile d'un JWT visibles publiquement après le décodage en base64.

Pourquoi?

Il semble qu'il serait beaucoup plus utile de le chiffrer avec le secret.

Quelqu'un peut-il expliquer pourquoi, ou dans quelle situation, garder ces données publiques est utile?

j'ai besoin d'aide
la source
lorsque vous écrivez JWT, vous voulez probablement dire JWS. Parce que JWE (qui est également une "sous-classe" de JWT) est en fait le contenu de ce cryptage.
Alexey

Réponses:

28

Vous choisissez de ne pas chiffrer la charge utile pour les mêmes raisons que vous choisissez de ne pas chiffrer autre chose: le coût (aussi petit soit-il) dépasse l'avantage, et de nombreuses données n'ont tout simplement pas besoin d'être sécurisées de cette façon.

Ce dont vous avez principalement besoin de protection, ce sont les personnes qui falsifient les données afin que le mauvais enregistrement soit mis à jour, ou que le compte courant de quelqu'un y trouve de l'argent qu'il n'est pas censé avoir. La signature du jeton Web JSON accomplit cela, car la modification d'une partie de la combinaison en-tête / charge utile / signature invalide le paquet.

Notez que vous pouvez toujours sécuriser les paquets sur la couche de transport à l'aide de SSL.

Robert Harvey
la source
Ah je vois, donc essentiellement JWT est un nouveau jeton CSRF. Merci pour votre explication, cela a dissipé la confusion.
ineedhelp
6
Aucun JWT n'est pas un nouveau jeton CSRF. Ce sont 2 choses différentes.
Ash
@ash si les détails d'une opération sont stockés dans le JWT et validés sur le serveur, le JWT ne joue-t-il pas essentiellement le rôle de prévention CSRF dans ce scénario? Je comprends que le principal objectif d'un JWT vanille est l'authentification, c'est très clair à partir de cette réponse. Je pense que j'imaginais ajouter plus de données et accomplir deux choses à la fois.
ineedhelp
@RobertHarvey, vous n'utilisez pas correctement JWT. JST est un terme "parapluie" pour JWS et JWE. JWS est d'authentifier, JWE est de crypter. Ainsi, "Le but d'un jeton Web JSON est de s'authentifier" devrait être en fait "JWS est de s'authentifier".
Alexey
@Alexey: J'ai fait un léger changement dans ma réponse pour accommoder.
Robert Harvey
4

L'utilisation du terme signature dans la RFC est analogue à une signature numérique en cryptographie asymétrique. En cryptographie asymétrique, si l'expéditeur crypte un message avec sa clé privée, toute personne qui a le message peut le décrypter avec la clé publique de l'expéditeur. Le but du terme signature n'est donc pas de garder un message secret, mais de vérifier l'intégrité / l'expéditeur du message, cela n'a pas été modifié.

Dans le cas des JWT, le système d'envoi est à la fois le créateur et le consommateur du message (voir le diagramme ci-dessous), et l'objectif est de s'assurer que le jeton transmis à l'utilisateur n'a pas été falsifié (par exemple, avec des privilèges élevés).

Et comme @Robert l'a mentionné, les JWT peuvent / doivent toujours être chiffrés avec TLS.

Voici une bonne explication des JWT et des signatures dont l'image ci-dessous provient. 5 étapes faciles pour comprendre les jetons Web JSON (JWT)

asdfasdf

Micah B.
la source
2

Pour ajouter à la réponse de Robert Harveys, le chiffrement de la charge utile présente un inconvénient important - cela signifie que le destinataire du service doit partager un secret avec le serveur d'authentification (la clé de chiffrement) pour comprendre si le porteur du jeton est autorisé ou non. ou pas. En revanche, n'importe qui peut valider un JWT en utilisant uniquement la clé publique publiée par le serveur d'authentification.

Ceci est un élément clé de la spécification de connexion openid car il permet aux applications clientes de valider les jetons d'identité émis par le serveur d'authentification, il facilite également le déploiement des serveurs de ressources (car ils n'ont pas besoin d'être déployés avec accès au cryptage secret ) et aide également lorsque vous essayez de diagnostiquer des problèmes avec un JWT émis.

Justin
la source
Vous essayez de comparer des mécanismes de chiffrement asymétriques et symétriques, jwt est une implémentation du chiffrement RSA.
TheAnimatrix