Desarrollo un servidor de licencias y un sistema cliente de licencias (aplicaciones basadas en Java).
El flujo es el siguiente:
- La licencia se almacena en el servidor de licencias
- La aplicación cliente incluye un componente de cliente de licencia.
- El cliente de licencias se conecta al servidor de licencias a través de HTTPS para recuperar la información de la licencia.
- La licencia no se pasa al cliente de la licencia, solo la información si la licencia está habilitada.
- Si la licencia está habilitada, el cliente de la licencia devuelve a la aplicación cliente el estado de la licencia y es posible utilizarla.
- Si la licencia no está habilitada, el cliente de la licencia inicia el período de evaluación (por ejemplo, 30 días). Durante este período, recomendamos a nuestros clientes que adquieran la licencia.
- Si se pasa el período de evaluación, el cliente de la licencia devuelve a la aplicación cliente el estado sin licencia y no es posible utilizar las aplicaciones cliente.
Tengo un dilema sobre cómo persistir el tiempo de inicio de la evaluación, ya que si un cliente puede comprometerlo y el período de evaluación volverá a comenzar. Almaceno el estado de la licencia en la base de datos utilizando el algoritmo AES-256, por lo que no creo que un cliente pueda descifrar la información. Además, si un cliente eliminará el estado de la licencia de la base de datos, no es posible utilizar la aplicación cliente, por lo que no me importa.
Similarmente, almaceno el tiempo de inicio de evaluación en la base de datos utilizando el algoritmo AES-256, por lo que no creo que un cliente pueda descifrar la información. Pero tengo un problema si un cliente eliminará el tiempo de inicio de evaluación de la base de datos. En este caso, comenzaré el período de evaluación desde el principio.
Quiero almacenar la información en la base de datos (para poder escalar en el futuro con la replicación de la base de datos). Además, no deseo almacenar el tiempo de inicio de evaluación en el servidor de licencias, ya que es un problema del cliente. Más detallado: en el futuro queremos admitir la licencia (y el tiempo de evaluación) para diferentes tipos de permisos. Por ejemplo, licencia para ejecutar un trabajo o licencia para editar un documento. Por lo tanto, el cliente puede tener una licencia completa para ejecutar un trabajo, pero puede estar en el período de evaluación para editar un documento.
Cualquier sugerencia es más que bienvenida.