Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

188
Views
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 .

over 4 years ago · Santiago Trujillo
1 answers
Answer question

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 .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!