es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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í
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar con el formato de la variable pubk_bytes. La función from_jwk devuelve un objeto RSAAlgorithm y luego estás usando el método public_bytes para convertirlo al formato PEM. Sin embargo, el método public_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ón decode. Puedes hacer esto envolviendo el método public_bytes con el método decode, de esta manera:

    pubk_str = pubk_bytes.decode('utf-8')
    

    Luego, pasa la variable pubk_str a la función decode en lugar de pubk_bytes:

    claim = jwt.decode(myToken, pubk_str, algorithms=['RS256'])
    

    Esto debería decodificar correctamente el JWT utilizando la clave pública.

Comments are closed.