Me preguntaba si esta sería una forma razonable de escribir un método de autenticación personalizado para una API RESTful. Parece moderadamente seguro, pero quizás estoy muy equivocado aquí.
1) El correo electrónico y la contraseña se envían a través de HTTPS a mi servidor.
2) El servidor almacena el correo electrónico y ejecuta la contraseña a través de un hash SHA512 con un salt aleatorio de 256 bits. La contraseña con hash y con sal se almacena en la base de datos.
Así que ahora tenemos:
email = [email protected]
password = OHqhuewQclakufEjUbZMbowJKEGcvEBz,51c6a3cb58e10754f76e334de064a9dede7875141e1ce0233e3ff14fd7be98a4d5b8fc1c5ab871cb3b1d6b0c9f8073bc3558308511fc4fd6bd049aed5e58a9a4
3) Genere un token aleatorio con un tiempo de vida (muy aleatorio y grande), guárdelo en la base de datos y luego vincule ese token aleatorio a ese usuario autenticado específico.
4) Envío el token de vuelta al cliente a través de HTTPS (web, Android o iOS), por lo que se almacena en cookies o SharedPrefs o lo que sea.
5) Ahora, el cliente envía el token con cada solicitud. Luego, el servidor puede verificar el valor del token almacenado en caché con el que recibe cada vez para asegurarse de que el servidor siempre sepa quién realiza las solicitudes.
¿Esto parece razonable y seguro? El problema que creo que surge aquí es si la base de datos de tokens alguna vez se ve comprometida. ¿Hay tal vez alguna forma de endurecer esa parte?