He estado leyendo todo lo que pude sobre este tema durante los últimos días y no puedo decidir cuál sería el mejor enfoque.
Los dos únicos requisitos son:
-
Necesito conocer los usuarios que han iniciado sesión y cada sesión que tienen, para que el usuario pueda ver una lista con esta información y poder cerrar cualquier sesión que elija.
-
Ambas aplicaciones deberían usar los mismos puntos finales de una API de descanso.
Al principio usaba cookies de sesión y llamaba a la API con setCredentials = true, pero descubrí que las aplicaciones móviles manejan las cookies de manera diferente y no tengo control sobre eso (por ejemplo, se eliminan por varias razones antes de que caduquen ). Pensé en guardar la cookie en el almacenamiento nativo y agregarla a cada solicitud, pero no puedo acceder a la cookie de ninguna manera porque httpOnly está configurado como verdadero. La solución sería establecer httpOnly en falso, pero de esta manera estoy exponiendo la cookie y no estoy seguro de qué medidas de seguridad debo implementar para proteger la cookie contra el robo o la manipulación.
La otra solución sería usar JWT y almacenarlo en el almacenamiento web / nativo. También almacenaría en una tabla todos los tokens que siguen siendo válidos (hash con un algoritmo de contraseña) para obtener la lista de usuarios registrados y sus sesiones, y otra tabla para tokens no válidos para cuando el usuario elija finalizar una sesión en particular / cambie la contraseña / Pero, una vez más, no estoy seguro de las medidas de seguridad que deberían aplicarnos con este enfoque. ¿Debo cifrar el token también? Estaba pensando en agregarle datos sobre el dispositivo que solicita el token para verificar siempre que el dispositivo que solicitó el token es el que lo usa. ¿Qué otras cosas debo hacer para proteger este token?
Si implemento correctamente cualquiera de estas opciones, ¿cuál sería la más segura tanto para la web como para el móvil?