Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

182
Vistas
Diferentes servidores generan diferentes tokens JWT usando los mismos parámetros

Estoy usando la implementación JWT de python-jose para generar tokens JWT con fines de autenticación.

Ejecutamos nuestro backend en un contenedor Docker en Kubernetes y , a veces, cuando tenemos varios pods, obtenemos diferentes tokens para los mismos reclamos, secreto y algoritmo . También me sucedió esto en un solo contenedor en mi entorno de desarrollo al touch mi script index.wsgi .

Vaina 1:

 >>> jwt.encode({'key': 'value'}, 'secret', algorithm='HS256') 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJrZXkiOiJ2YWx1ZSJ9.FG-8UppwHaFp1LgRYQQeS6EDQF7_6-bMFegNucHjmWg'

Vaina 2:

 >>> jwt.encode({'key': 'value'}, 'secret', algorithm='HS256') 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJrZXkiOiJ2YWx1ZSJ9.JPIDicqvQ6GAh14yE2yZ3wnZQ0LiLNTTRDtJgLZcn98'

Me sumergí profundamente en el código para ver qué podría estar causando esto y no encontré nada incriminatorio. En pocas palabras, esto es lo que hace el código:

  1. Haga un json.dumps del encabezado del algoritmo ( {'typ': 'JWT', 'alg': 'HS256'} ) y codifíquelo como Base64, eliminando cualquier = 's
  2. Haga un json.dumps de la carga útil ( {'key': 'value'} ) y codifíquelo como Base64, eliminando cualquier = 's
  3. Firme encoded_header.encoded_payload usando HMAC256 con la clave secret y codifíquelo como Base64, nuevamente eliminando cualquier = 's
  4. Concatene la firma con la cadena anterior, lo que da como resultado encoded_header.encoded_payload.encoded_signature

En este punto, no tengo idea de qué está causando esto. Sospecho que hay algún tipo de error en la implementación de Python en HMAC o SHA256, pero parece poco probable... ¿Alguna pista?

Nota: hemos reproducido con éxito el error con pyjwt , que fue la base para python-jose .

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Esto ocurre porque los diccionarios de Python están desordenados. Si decodifica los dos JWT, verá que la parte del encabezado se ordena de manera diferente para cada token.

 { "typ": "JWT", "alg": "HS256" }

y

 { "alg": "HS256", "typ": "JWT" }

Esto hace que el encabezado codificado en base64 sea diferente, lo que a su vez hará que la firma sea diferente.

Dicho esto, ambos son tokens válidos para exactamente el mismo conjunto de reclamos, y ambos deberían verificarse correctamente. No hay nada en la especificación de JWT que dicte que un conjunto de notificaciones equivalente deba dar como resultado una salida de JWT equivalente.

Nota: soy el autor de la biblioteca python-jose .

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda