Autenticación con la base de datos¶
Los usuarios, los roles, los permisos y las reglas de RLS viven en un schema auth de tu propia
base de datos, y los tokens los firma la API.
Montarla¶
pip install 'tai-api[database]'
tai-api auth init # elige Database
tai-sql push -s auth --with-feed # crea el schema y el usuario admin
tai-api rbac push # lleva rbac/main.py a sus tablas
auth init pregunta:
| Pregunta | Clave del .taiapiproject |
Por defecto |
|---|---|---|
| Tiempo de expiración del token (minutos) | auth.config.expiration |
30 |
| ¿Habilitar control de sesiones? | auth.config.session_management |
sí |
| ¿Habilitar expiración de contraseñas? | auth.config.password_expiration |
no |
| Días de validez de una contraseña | auth.config.password_expiration_days |
90 |
y crea schemas/auth.py en el proyecto de tai-sql. Ese fichero es tuyo a partir de ahí: una
versión nueva de tai-sql no lo actualiza.
Lo que necesita en ejecución¶
| Variable | Qué es |
|---|---|
SECRET_KEY |
La clave con la que se firman los tokens. Sin ella la API no arranca. El nombre se cambia con secret_key_name |
MAIN_DATABASE_URL |
La base de datos, la del datasource() de schemas/auth.py |
ADMIN_PWD |
La contraseña del usuario admin que crea el feed. Sin ella, admin |
Cómo se comporta¶
- Una sesión por usuario (
session_management). Un login nuevo cierra la sesión anterior, y cada petición comprueba contra la base de datos que el token es de la sesión vigente y que el usuario sigue activo. Cuesta una consulta por petición, que es el precio de poder revocar un token; sin ella, el token vale hasta que caduca. - Cambiar la contraseña o desactivar a un usuario cierra sus sesiones.
- Las credenciales incorrectas responden lo mismo para un usuario que no existe que para una contraseña mala: distinguirlo permitiría averiguar qué usuarios hay. La contraseña se verifica en el mismo tiempo exista o no el usuario.
- Las contraseñas se guardan hasheadas (bcrypt): no se pueden leer, solo verificar.
- La expiración de contraseñas: con ella activa, un usuario con la contraseña caducada no puede entrar hasta que un administrador se la cambie, y cambiarla la renueva.
Sin la sesión con cookie, el refresh token viaja en el cuerpo y dura cuatro veces lo que el access.
Los realms¶
Un realm es un espacio de usuarios y permisos: main por defecto. En modo Database son filas de la
tabla realm; tai-api rbac push crea las que tienen su rbac/<realm>.py y no existen.