2017-10-04 9 views
1

J'utilise JWT dans mon application pour le processus d'authentification de connexion. Pour générer le jeton J'utilise:JWT Token Signature non valide

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

généré Token:

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJlaG91c2VAZGV2ZXJldXgub3JnIn0.5SX-ua-p_RlfC3CZa-YXnQu_YR7RsG2Xfim3LOmlqxjAZrIyZiz0fYZwViHr113ms8TNvngcJcV07U4hK-RBZQ

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

+0

avez-vous fournisseur la clé générée par 'MacProvider.generateKey()' pour décoder la signature en jwt.io? – lztachyon

Répondre

1

MacProvider.generateKey() génère une nouvelle clé de signature aléatoire chaque fois que vous l'utilisez. 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 serez pas en mesure de 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 pouvant 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. Ensuite, marquez le chèque en jwt.io pour vérifier le jeton

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

Cela a du sens. Merci. – Mohit224