Vérification de Auth0 JWT jette un algorithme non valide

J’ai créé un client Auth0, je me connecte et je reçois ce jeton:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ik1rVkdOa1l5T1VaQ1JqTkRSVE5EUmtNeU5rVkROMEUyUTBVMFJrVXdPVEZEUkVVNU5UQXpOZyJ9.eyJpc3MiOiJodHRwczovL3RvdGFsY29tbW56LmF1LmF1dGgwLmNvbS8iLCJzdWIiOiJnb29nbGUtb2F1dGgyfDEwMzI5NzA4OTYyMTk5NjUwMjY2MiIsImF1ZCI6ImxTWUtXMUZZdENkMWJLQmdXRWN0MWpCbmtDU3R2dW5SIiwiaWF0IjoxNTA5ODYyMTI1LCJleHAiOjE1MTAyMjIxMjV9.kjmckPxLJ4H9R11XiBBxSNZEvQFVEIgAY_jj2LBy4sEJozBB8ujGE7sq9vEIjMms-Lv2q9WzFQPrqcxyBcYC4Je4QojMgvqLDCodtpot0QUle8QfGmonc1vZYIZyX-wqyOXtRqhoZVEKTeLhm9Le2CV4_a3BwgjkE1LjcDx01GZfsnaId8mh10kGk-DBmr5aVc8MxglLCq5Uk8Zbl2vDc__UMDgx1eQPQg-zve4fUf8zHcxizypYTnF_v0dEAT00L2j5J41SFYdWvP6ReQ3vhVYew2o9iM6u1s75HE-xW8s4pzV4BZAQtgfgIeCd6aVGZs76bcnQXBLej1B7zaPBvA 

Ce que j’essaie de faire maintenant est de vérifier le jeton avec jsonwebtoken . Le jeton est signé avec un algorithme RS256 .

J’ai téléchargé le certificate de signature au .pem et je l’utilise avec succès pour vérifier le jeton comme suit:

 var cert = fs.readFileSync('certificatee.pem'); jwt.verify(token, cert, {algorithm: 'RS256'}, (err, decoded) => { console.log(err) console.log(decoded) }); 

Ce que je veux faire et cela ne fonctionne pas, c’est vérifier le jeton en utilisant le secret (appelé Client Secret dans les parameters du client Auth0 et est une chaîne).

 jwt.verify(token, MYSECRET, {algorithm: 'RS256'}, (err, decoded) => { console.log(err) console.log(decoded) }); 

Ce code génère toujours une erreur:

 { JsonWebTokenError: invalid algorithm at Object.module.exports [as verify] (C:\code\aws\learn-authorizer\node_modules\jsonwebtoken\verify.js:90:17) at Object. (C:\code\aws\learn-authorizer\testme.js:25:5) at Module._comstack (module.js:624:30) at Object.Module._extensions..js (module.js:635:10) at Module.load (module.js:545:32) at tryModuleLoad (module.js:508:12) at Function.Module._load (module.js:500:3) at Function.Module.runMain (module.js:665:10) at startup (bootstrap_node.js:187:16) at bootstrap_node.js:608:3 name: 'JsonWebTokenError', message: 'invalid algorithm' } 

Ma question est la suivante: comment vérifier le jeton RS256 à l’aide de la clé secrète plutôt que du fichier de certificate? (J’ai également essayé de créer un nouveau client utilisant l’algorithme HS256, mais j’obtiens la même erreur).

Si vous utilisez uniquement une clé secrète, l’utilisation de RS256 ne fonctionnera pas, car elle est basée sur une paire de clés privée / publique. Utiliser seulement une clé secrète indique généralement H256. Dans ma réponse, je suppose que ce que vous appelez MYSECRET n’est que le contenu de certificatee.pem .

Quoi qu’il en soit, je suppose que votre chaîne doit contenir

 -----BEGIN RSA PRIVATE KEY----- 

et

 -----END RSA PRIVATE KEY----- 

ou PUBLIC au lieu de PRIVATE .

Vous pouvez le voir dans la source . Les lignes mentionnées dans votre message d’erreur contiennent:

 if (!~options.algorithms.indexOf(header.alg)) { return done(new JsonWebTokenError('invalid algorithm')); } 

et options.algorithms est défini comme

 if (!options.algorithms) { options.algorithms = ~secretOrPublicKey.toSsortingng().indexOf('BEGIN CERTIFICATE') || ~secretOrPublicKey.toSsortingng().indexOf('BEGIN PUBLIC KEY') ? [ 'RS256','RS384','RS512','ES256','ES384','ES512' ] : ~secretOrPublicKey.toSsortingng().indexOf('BEGIN RSA PUBLIC KEY') ? [ 'RS256','RS384','RS512' ] : [ 'HS256','HS384','HS512' ]; } 

Si vous ne disposez pas des éléments RSA au début et à la fin, il cherchera les algorithmes suivants: 'HS256','HS384','HS512' .

Je n’avais jamais utilisé RS256 avec JWT, mais je l’ai utilisé avec ssh, et je sais que c’est très sensible à l’en-tête. La chaîne doit être au format exact.

Avez-vous essayé de définir l’algorithme sur “HS256”?

Selon les documents Auth0 à l’ adresse https://auth0.com/docs/api-auth/tutorials/verify-access-token#verify-the-signature

 For HS256, the API's Signing Secret is used. You can find this information at your API's Settings. Note that the field is only displayed for APIs that use HS256. For RS256, the tenant's JSON Web Key Set (JWKS) is used. Your tenant's JWKS is https://YOUR_AUTH0_DOMAIN/.well-known/jwks.json.