¿Cómo se implementa JWT?

4

Estoy usando django-rest-framework-jwt en una de mis API. Como sabrás, el concepto es simple: envías un nombre de usuario y contraseña y recibes un token. El token no se almacena en ningún lugar del servidor.

Al enviar el token en el encabezado de las solicitudes posteriores, el usuario asociado con el token se extrae de la base de datos. Tengo curiosidad por saber cómo se implementa esto. ¿Cómo puede el servidor extraer el usuario y también la fecha de caducidad del token con solo tener el token?

Sé el concepto de claves públicas / privadas, pero si se implementa con la misma idea, ¿cuál sería la clave privada y pública aquí?

    
pregunta norbertpy 26.03.2015 - 23:57
fuente

1 respuesta

5

Un token JWT consiste en una cadena codificada en base64 que contiene encabezado, reclamos y firma.

La sección de reclamaciones contiene un campo de caducidad codificado JSON, exp :

  

Tiempo de caducidad. Contiene el tiempo UTC Unix después del cual deberías   Ya no aceptas este token. Debería ser después de la fecha de emisión.

El nombre de usuario también se puede almacenar en el objeto de reclamaciones.

Hay dos opciones con respecto a la "firma" de la JWT:

  

Los JWT se pueden firmar usando un secreto (con el algoritmo HMAC) o un   par de clave pública / privada usando RSA.

Con el secreto, hay una clave privada, sin embargo, se usa para autenticar el mensaje usando HMAC SHA256 . No hay cifrado, solo autenticación para que un cliente pueda resolver lo que estaba almacenado en el token, pero no cambiarlo. HMAC es una forma de calcular hashes sin que sean vulnerables a ataque de extensión de longitud . No hay una clave pública en este método.

Con RSA, la clave privada se utiliza para firmar la clave, que se puede verificar utilizando la clave pública cuando la recibe un cliente. Por lo tanto, solo el componente que genera las claves necesita conocer la clave privada.

Consulte Understanding JWT para obtener más información.

    
respondido por el SilverlightFox 27.03.2015 - 12:50
fuente

Lea otras preguntas en las etiquetas