Ya no tienes que indagar más por todo internet ya que estás al espacio adecuado, contamos con la respuesta que buscas y sin liarte.
Solución:
Si estás usando solo un secreto key entonces usar RS256 no funcionará, ya que se basa en un privado/público key par. Usando solo un secreto key generalmente indica H256. En mi respuesta asumo que lo que llamas MYSECRET
es solo el contenido de certificate.pem
.
De todos modos, asumiría que su string tiene que contener
-----BEGIN RSA PRIVATE KEY-----
y
-----END RSA PRIVATE KEY-----
o PÚBLICO en vez de PRIVADO.
Puedes ver esto en la fuente. Las líneas mencionadas en su mensaje de error contienen:
if (!~options.algorithms.indexOf(header.alg))
return done(new JsonWebTokenError('invalid algorithm'));
y options.algorithms
Se define como
if (!options.algorithms)
~secretOrPublicKey.toString().indexOf('BEGIN PUBLIC KEY') ?
[ 'RS256','RS384','RS512','ES256','ES384','ES512' ] :
~secretOrPublicKey.toString().indexOf('BEGIN RSA PUBLIC KEY') ?
[ 'RS256','RS384','RS512' ] :
[ 'HS256','HS384','HS512' ];
Si no tiene las cosas RSA al principio y al final, buscará los siguientes algoritmos: 'HS256','HS384','HS512'
.
No he usado RS256 con JWT antes, pero lo he usado con ssh, y sé que es muy sensible a tener el encabezado. El string tiene que estar en el formato exactamente correcto.
Debe especificar los permitidos. algorithms
como una matriz de cadenas, en lugar de un algorithm
Cuerda.
jwt.verify(token, MYSECRET, algorithms: ['RS256'] );
¿Ha intentado configurar el algoritmo en “HS256”?
Según los documentos de Auth0 en 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.
Reseñas y puntuaciones del tutorial
Recuerda algo, que tienes la capacidad de decir si te fue preciso.