Autenticación¶
La autenticación usada es mediante JWTs, que dan la posibilidad de usar un mismo método para ambos APIs disponibles. Se puede ver discusión en detalle sobre la toma de esta decisión y detalles de implementación en GitHub.
Funcionamiento¶
La siguiente explicación puede ayudar a entender cómo funciona la autenticación en el backend:
Cuando un usuario se registra, se guarda en la BBDD.
Login se basa en comprobar que el usuario esta en la BBDD y la contraseña coincide con un hash que hay guardado (para no guardar contraseñas en la bbdd, por si se filtrase).
Cuando te has loggeado, te da un token que tiene codificado en él:
Identidad: el email en este caso
Fecha de expiracion
Resto de datos para el cifrado
Va cifrado de tal manera que solo el servidor lo puede desencriptar y, como la información va metida en el token, no hace falta una base de datos de tokens.
El logout es más complicado porque como los tokens no están en memoria hay que prohibirlos de alguna forma. Para eso ponemos una tabla en la BBDD de tokens prohibidos y, cuando se hace logout se prohibe entrar con ese token.
Errores de Autenticación¶
Un error de autenticación se puede deber a una de las siguientes tres razones:
El token es inválido: el valor simplemente no es un token.
El token está expirado: los tokens son temporales, y expiran en aproximadamente una hora por defecto. Esto implica una mayor seguridad, pero por tanto será necesario hacer un login cada vez que suceda.
El token ha sido revocado anteriormente: el token ha sido revocado manualmente. Por ejemplo se ha hecho logout, o se ha borrado su cuenta.