Estoy utilizando el inicio de sesión de Facebook en una aplicación móvil nativa, y estoy tratando de averiguar si mi enfoque es lo suficientemente seguro.
Este es el flujo (toda la comunicación se realiza a través de SSL):
-
Inicio de sesión de usuario en Facebook a través de la aplicación móvil.
-
La aplicación pasa la clave de acceso a corto plazo de Facebook del usuario al servidor.
-
El servidor usa la clave y realiza una solicitud a Facebook para recuperar los detalles del usuario y obtener la clave de acceso a largo plazo de Facebook.
-
Si la solicitud a Facebook tiene éxito, se crea un usuario en mi base de datos.
-
Luego se crea un objeto para ese usuario, que incluye su ID de Facebook, el token de Facebook y la fecha de creación. Ese objeto se encripta utilizando Rijndeal (256 bits) y se devuelve al cliente. De ahora en adelante, todas las solicitudes del cliente incluyen ese token. El token es válido por 48 horas. Cuando el token expira, una vez más uso la clave de acceso de Facebook y hago una solicitud a Facebook. Si la clave de acceso de Facebook sigue siendo válida, se genera un nuevo token y se devuelve al cliente.
- Cuando el usuario desea sus datos, el cliente envía el token, si el descifrado del token se realiza correctamente, uso su ID de Facebook (que también es el ID que uso para el usuario), que forma parte del token, para recupere su información y envíela al cliente.
Tengo dos preguntas -
- ¿Es seguro ese flujo?
- Cuando cifro el token, ¿debo usar IV y sal diferentes para cada token? (Supongo que es necesario, pero ¿significa que debo almacenar la IV y la sal en la base de datos, y recuperarla en cada llamada que haga el cliente? Parece bastante expansiva).