¿El token seguro sin estado que puede caducar?

3

Quiero generar un enlace que se dará a un usuario. En este enlace, como parámetro, agregaré un token que será válido solo por unos días. Entonces, después de ese tiempo, el servidor verificará el token, verá que ya no es válido y rechazará la descarga.

Lo que me gustaría hacer es crear un token que no requiera ningún estado del lado del servidor, es decir, que no requiera que cree una tabla con la asociación de fecha de vencimiento / token.

Me pregunto si hay algún algoritmo inteligente que me permita hacer eso. Básicamente, un token que no se puede descifrar después de un tiempo determinado (suponiendo que el algoritmo de descifrado en el servidor usa el tiempo real, actual).

    
pregunta this.lau_ 11.04.2017 - 15:02
fuente

2 respuestas

0
  

Luego de ese tiempo, el servidor verificará el token, verá que ya no es válido y no permitirá la descarga

Sí, solo empaque algunos datos que identifiquen el activo que se descargará con fecha de caducidad y cifrelo usando un algoritmo apropiado (si el emisor del token también es el validador, entonces un algoritmo simétrico está bien, si están separados cuerpos, luego cifrar con una clave privada en el emisor y descifrar con la clave pública correspondiente en el validador.

El emisor y el validador necesitan almacenar las claves.

El validador también debe controlar el acceso al archivo descargable.

Asegúrese de crear una representación adecuada del token (encriptado) que fácilmente pasará a través del sistema de correo y es válido en una URL.

Eso es alrededor de 10 líneas de código (PHP) para el emisor y aproximadamente 20 para el validador.

  

un token que no se puede descifrar después de un tiempo dado

No, eso es imposible.

    
respondido por el symcbean 12.04.2017 - 22:09
fuente
0

Puede usar un token cifrado que consiste en un número primo y una fecha de vencimiento. Para cifrar el token solo use un algoritmo simétrico como AES.

Necesitarías hacer un seguimiento de

  • La diferencia entre el número de tokens generados y el número de tokens validados, d
  • El último número primo generado, p
  • El producto de todos los números primos generados, t

Para generar un token

  • aumentar d
  • Calcule el próximo número p y devuélvalo (esto se puede hacer de manera eficiente).

Para validar un token

  • Comprueba que el token no haya caducado
  • Comprueba que t no sea divisible por el número primo

Si el token se valida

  • Multiplica t por ese número primo
  • Disminuir d

De esta manera, invalidará automáticamente el token para que no se pueda usar más (la próxima vez que intente validar ese primo, t será divisible por él y devolverá el valor falso).

Cada vez que el número de tokens validado sea igual al número de tokens generados (d = 0), también puede reinicializar todas las variables (p = 1, t = 1) para que el tamaño de t No crece indefinidamente.

    
respondido por el SomeGuy 12.04.2017 - 15:52
fuente

Lea otras preguntas en las etiquetas