Estoy trabajando en la aplicación React-Django que usa JWT para la autenticación. El usuario inicia sesión con su nombre de usuario y contraseña, el servidor valida y responde con JWT y nombre de usuario, y (actualmente) solo estoy almacenando el JWT en sessionStorage
.
Luego se verifica que JWT es válido y actual en cualquier momento en que el usuario navega entre rutas protegidas. Si sigue siendo bueno, se actualiza. es decir, se envía desde sessionStorage.getItem('token')
al servidor, se devuelve uno nuevo si el enviado sigue siendo válido y reemplaza al existente en sessionStorage
. Genial.
El problema con el que me he encontrado es que, mientras he identificado, el usuario tiene permiso para acceder y seguir accediendo a estas rutas protegidas, no sé realmente quiénes son y, por lo tanto, no puedo extraer datos específicos de ellos. (No he tenido suerte con el uso de cosas como user = request.user.username
para saber quién es el usuario actual y el JWT después de que el número inicial de JWT no lleve el nombre de usuario junto con él ... por lo que puedo decir).
Veo dos opciones para resolver esto:
1) Almacene el JWT en la base de datos en relación con el usuario y en sessionStorage
para que pueda llamarse desde sessionStorage
, en comparación con la base de datos, y luego identifique al usuario a partir de eso.
Parece que esta podría ser la opción "más segura" para ir.
2) Dado que el servidor ya está enviando de vuelta el username
junto con el JWT cuando el usuario inicia sesión, puedo comenzar a almacenar ambos en sessionStorage
. De esa manera, puedo sessionStorage.getItem('username')
y solicitar al servidor que recupere información específica del usuario. Sin embargo, alguien podría sessionStorage
y obtener su nombre de usuario. (Los JWT solo son válidos durante 15 minutos, y si cumple con ese límite de tiempo, el usuario cierra la sesión y se hace sessionStorage.clear()
).
El segundo, es lo que me preocupa de la seguridad. Estoy lejos de ser un experto en seguridad, así que solo tengo curiosidad por saber cuáles son las ramificaciones de almacenar username
en sessionStorage
y cuáles de ellas serían "mejores".
EDITAR: A medida que continúo leyendo sobre el tema, estoy encontrando numerosas guías y libros que usan ejemplos donde username
se almacena en sessionStorage
. Aunque eso no lo hace bien. Por ejemplo, este bonito ejemplo que almacena el nombre de usuario y la contraseña en localStorage
(es posible que me esté arriesgando, pero es una idea muy mala):