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?
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());