web-dev-qa-db-fra.com

Signature non valide du jeton JWT

J'utilise JWT dans mon application pour le processus d'authentification de connexion. Pour générer le jeton que j'utilise:

Jwts.builder().setSubject(username).signWith(SignatureAlgorithm.HS512, MacProvider.generateKey()).compact();

Jeton généré:

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-aU-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjAZRIymsVKHVZZV0Z

Lorsque je décode ce jeton dans le débogueur jwt.io, il m'indique une signature non valide. Je ne peux pas trouver la raison de cet échec car je peux voir le nom d'utilisateur dans la charge utile que j'utilise pour m'authentifier. Quelqu'un pourrait-il me signaler le problème? Dois-je changer quelque chose dans le code?

6
Mohit224

MacProvider.generateKey() génère une nouvelle clé de signature aléatoire à chaque utilisation. Vous devez le générer une fois et le stocker. La clé est utilisée pour signer et vérifier le jeton.

Si vous ne stockez pas la clé, vous ne pourrez pas vérifier le jeton, ce qui est exactement le problème avec jwt.io. Vous devez fournir la clé de signature. Dans votre cas, en utilisant une clé aléatoire qui peut contenir des caractères non représentables (il est également possible d'utiliser une phrase secrète, mais non recommandée), codez-la en base64. Cochez ensuite la case dans jwt.io pour vérifier le jeton

Key key =MacProvider.generateKey();
String keyB64 = javax.xml.DataTypeConverter.printBase64Binary(key.getEncoded());
5
pedrofb