Error de verificación de token utilizando JWK/JWT para autenticación de usuario.
Estoy intentando verificar un idToken utilizando una clave pública en python.
Primero convierto el token JWK a PEM, pero cuando llamo a la función “decode”, aparece una excepción de “verificación de firma fallida”. ¿Qué me falta?
# Aquí va una cadena larga: este es el token a verificar
myToken = 'ezFraWQiXXX.YYYYYYYY.ZZZZZZZZ'
# Token JWK
webkey = {
"alg": "RS256",
"e": "AQAB",
"kid": "d9FzOfniXuHf2sF3opIKZb0sW8Nuaa0d5d+AXXXXXXXX=",
"kty": "RSA",
"n": "nQwBvRlZKdXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX4HcenyO_WASyjr6korLEHxh8XXXXXXXXXXXX",
"use": "sig"
}
# Convirtiendo JWK a PEM
public_key = jwt.algorithms.RSAAlgorithm.from_jwk(webkey)
pubk_bytes = public_key.public_bytes(encoding=serialization.Encoding.PEM, format=serialization.PublicFormat.SubjectPublicKeyInfo)
# Aquí es donde obtengo la excepción de "verificación de firma fallida"
claim = jwt.decode(myToken, pubk_bytes, algorithms=['RS256']) # <<-- idealmente esto debería decodificar el token para mí
davy.ai
Parece que el problema podría estar con el formato de la variable
pubk_bytes
. La funciónfrom_jwk
devuelve un objetoRSAAlgorithm
y luego estás usando el métodopublic_bytes
para convertirlo al formato PEM. Sin embargo, el métodopublic_bytes
devuelve una cadena de bytes, que podría no estar en el formato correcto para decodificar el JWT.Para solucionar esto, intenta convertir la variable
pubk_bytes
a una cadena de texto antes de pasarla a la funcióndecode
. Puedes hacer esto envolviendo el métodopublic_bytes
con el métododecode
, de esta manera:Luego, pasa la variable
pubk_str
a la funcióndecode
en lugar depubk_bytes
:Esto debería decodificar correctamente el JWT utilizando la clave pública.