Tengo el requisito de generar una URL de uso único que debería tener las siguientes funciones:
- Como los parámetros de consulta de la URL pueden contener información confidencial, deben estar cifrados (además del cifrado
https
). - Una vez que se usa, la URL no se puede usar nuevamente.
- Las URL tienen caducidad automática después de un cierto tiempo.
- Será posible que un administrador revoque una URL válida. Si el usuario en un momento posterior intenta utilizar esta URL, debería ver un mensaje de error adecuado.
Para hacer esto, puedo pensar en dos enfoques de alto nivel:
- Genere un número aleatorio como el parámetro de consulta de la URL. Almacene el número aleatorio y los parámetros correspondientes (es decir, los parámetros de consulta reales, vencimiento, estado de revocación, estado usado) en una base de datos. Cuando el usuario utiliza la URL, verifique todas las condiciones previas requeridas y márquela como se usa antes de proporcionar los parámetros de consulta reales.
- Incruste los parámetros de consulta reales y la marca de tiempo de caducidad como el parámetro de consulta de la URL. Cifre la URL con un algoritmo como AES256. Sin embargo, todavía necesitaría almacenar la URL en una base de datos para proporcionar la función de revocación.
En base a lo anterior, me inclino por la opción 1, ya que toda la lógica está en un solo lugar y parece más segura. ¿Existe alguna práctica recomendada en la industria para tratar este tipo de problema?
Si es importante, este será un servicio web basado en REST alojado en IIS.