servicios web: cómo extraer/descifrar el tiempo de caducidad del token web Json emitido externamente


Así que estoy trabajando con un servicio web RESTful de terceros en el que tengo que autenticarme solicitando un JWT y proporcionarlo a cualquier otra solicitud. Lo hago simplemente publicando mi nombre de usuario y contraseña y recibo un token para esto. No conozco el secreto utilizado para crear el token ni nada más además del nombre de usuario y la contraseña.

Ahora, me gustaría verificar el tiempo de vencimiento del JWT antes de reutilizarlo para solicitudes de servicios web posteriores o simplemente renovarlo. Yo kahora podría usarlo y detectar algún tipo de excepción de vencimiento, pero preferiría no hacerlo.

Intenté seguir este tutorial: [https://stormpath.com/blog/token-auth-for-java]

pero me quedo atascado en el punto en el que tengo que proporcionar la clave de firma.

¿Cómo podría hacerlo ya que no tengo el secreto que se usó para codificarlo?

Adiós: estoy trabajando con groovy y wslite en este.



------------Respuesta------------

Deberías ser capaz de tomarel cuerpo del token y decodificarlo.

La clave privada no se usa para cifrar el cuerpo de un JWT, solo se usa para generar la firma...

Entonces, en Groovy solo puedes hacer:

// A JWT from the link you gave above
String key = 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOi8vdHJ1c3R5YXBwLmNvbS8iLCJleHAiOjEzMDA4MTkzODAsInN1YiI6InVzZXJzLzg5ODM0NjIiLCJzY29wZSI6InNlbGYgYXBpL2J1eSJ9.43DXvhrwMGeLLlP4P4izjgsBB2yrpo82oiUPhADakLs'

// Just the body (middle section)
String body = key.split(/\./)[1]

// Un base64 it (using the Java 8 Base64 class)
String unencoded = new String(Base64.decoder.decode(body), 'UTF-8')

// Parse the json into a map
Map data = new groovy.json.JsonSlurper().parseText(unencoded)

// Get the expiry
long exp = data.exp

assert exp == 1300819380

Por supuesto, no hay nada que decir que el cuerpo del token tiene que contener algún tipo de tiempo de caducidad para que usted lo mire... Podría ser simplemente una identificación interna



------------Respuesta------------

Si no conoce el cifrado utilizado para codificarlo ni desea descifrar su cifrado, entoncesno puede decodificar ninguna información del token. No hay nada como 'información estándar que debe codificarse en token', no es necesario que el token contenga información cifrada, podría ser solo un UUID generado aleatoriamente almacenado en su lado en DB, entonces en ese caso no puedes decodificarlo en absoluto.

Etiquetas: jwt groovy rest web-services

Artículos relacionados:

django: forma correcta de manejar un valor NULL único

rendimiento - Python, ¿por qué mmap.move() llena la memoria?