Inicio de sesión de token y cierre de sesión

12

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.

  1. Crear la lista de tokens caducados
  2. 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.

    
pregunta eemrxoha 02.10.2015 - 21:16
fuente

1 respuesta

2

Los tokens JWT están diseñados principalmente como un mecanismo de afirmación, es decir, proporcionan la información relevante del usuario para que el servidor pueda "conocer" al usuario en cuyo nombre se está realizando la operación. JWT es perfecto para el siguiente escenario

  1. No puede acceder a la información del usuario en el lado del servidor sin la participación del usuario, pero necesita información básica para las llamadas sin conexión.
  2. el aprovisionamiento JIT, es decir, para transferir los detalles del usuario de un sitio a otro (también conocido como federación).
  3. Operación de sesión / sin estado con datos limitados, es decir, necesita datos de usuario específicos con cada transacción, pero no tiene un concepto de sesión (por ejemplo, API, sistema de procesamiento de eventos)

Aunque parece que se usa para la sesión, creo que no es el mejor usado para el mismo.

OAuth es más apropiado, creo, para la gestión de sesiones. Está diseñado con conceptos básicos como token de actualización (extensión de sesión en caso de caducidad de la sesión), token de acceso (id de sesión) que se asigna fácilmente a los conceptos de administración de sesión. En el caso de OAuth, el método de autenticación (como JWT) es para que el servidor decida. Después de eso, lo único que necesita el cliente para la duración de la sesión es un token de acceso (similar al identificador de sesión). El mayor problema que he visto que se plantea es que el token de acceso y los tokens de actualización deben almacenarse y administrarse en el servidor. Si puede asignar fácilmente el token de acceso a la ID de sesión, creo que puede eliminar esa necesidad. Pero dado que ya está trabajando en almacenar JWT, esto no debería ser un problema para usted.

    
respondido por el jhash 03.10.2015 - 18:28
fuente

Lea otras preguntas en las etiquetas