Hola, estoy creando una aplicación nativa para dispositivos móviles que utiliza los puntos finales de la API REST para comunicarme con el servidor. He tenido experiencia previa en el desarrollo de clientes nativos, pero tengo un token simple (cadena generada al azar) almacenado en la base de datos en la misma tabla donde se almacena la información del usuario. Así que es como las sesiones usadas en el navegador, pero en lugar de las cookies, cada solicitud tiene un token en el encabezado.
Recientemente he rechazado el token JWT. Parece ser una gran manera de asegurar los puntos finales que son privados. Puede solicitar el token del cliente móvil siempre que pase + inicie sesión y obtenga el token generado en respuesta. Pero lo importante es que este token no se almacena en ninguna parte del servidor, el servidor verifica el token usando una palabra secreta, que es privada para el servidor como clave privada. Eso está bien para los puntos finales seguros, pero qué debo hacer si necesito una sesión de usuario, por ejemplo, ¿cómo funcionan las aplicaciones como Facebook, Amazon, Aliexpress ... tienen capacidad para usar la aplicación sin proporcionar credenciales, solo navegar por la tienda, pero requiere iniciar sesión cuando el usuario no quiere hacer la compra. Y después de esa sesión de usuario se mantiene durante algún tiempo. Esto se puede implementar con el token JWT sin ningún problema, pero cuando el usuario necesita cerrar sesión, ¿qué hacer en este caso? El token no se almacena en ninguna parte del servidor, así que, ¿cómo puedo destruirlo para que no sea válido?
Si el token se almacena en la base de datos, la API no tiene estado, como debería ser la API REST. Entonces, en general, no hay manera de mantener al usuario conectado en la API sin estado, ¿verdad?
Tengo algunas ideas sobre cómo implementar esto usando el token JWT, pero nuevamente no será una API sin estado, según tengo entendido.
- Crear la lista de tokens caducados
- Almacene el token JWT en la base de datos, pero ¿cuál es el propósito del token autodescriptivo (JWT) en este caso si está almacenado en la base de datos?
Por favor, sugiera cuál es la mejor manera en este caso y corríjame si me he equivocado. Gracias.