𝗔𝘂𝘁𝗲𝗻𝘁𝗶𝗰𝗮𝗰𝗶ó𝗻 𝗝𝗪𝗧 𝗲𝗻 𝗙𝗮𝘀𝘁𝗔𝗣𝗜
La autenticación pregunta "¿Quién eres?" La autorización pregunta "¿Qué puedes hacer?"
Si construyes una plataforma de IA sin seguridad, cualquiera puede acceder a datos privados. Pueden cambiar perfiles de usuario o ver el progreso de los estudiantes. Debes proteger tus recursos.
JWT (JSON Web Token) resuelve esto. En lugar de enviar una contraseña con cada solicitud, el usuario envía un token seguro.
El flujo de trabajo:
- Registrar usuario
- Hashear la contraseña
- Iniciar sesión y verificar credenciales
- Generar token JWT
- Acceder a rutas protegidas
Deberías usar estas herramientas:
- passlib con bcrypt para el hasheo de contraseñas
- python-jose para la generación de tokens
Nunca guardes contraseñas en texto plano. Si un hacker roba tu base de datos, lo obtendrá todo. En su lugar, guarda un hash.
Un hash convierte "password123" en una larga cadena de caracteres aleatorios. No puedes convertir el hash de nuevo en la contraseña. Solo verificas si la entrada coincide con el hash.
Cómo construirlo:
Registro El usuario envía un nombre de usuario y una contraseña. Hasheas la contraseña y la guardas en tu base de datos.
Inicio de sesión El usuario envía sus credenciales. Buscas el hash almacenado. Utilizas la librería para verificar la contraseña. Si coincide, creas un token.
Generación de JWT Un token contiene datos del usuario y un tiempo de expiración. Firmas el token con una clave secreta. Si un usuario intenta cambiar los datos, la firma fallará.
La respuesta de inicio de sesión se ve así: { "access_token": "eyJhbGciOiJIUzI1Ni...", "token_type": "bearer" }
Ahora el usuario posee una llave para tu sistema.
En la siguiente parte, aprenderemos cómo usar estos tokens para proteger rutas específicas y gestionar roles de usuario.
Resumen de pasos:
- Registrar usuario
- Hashear y guardar la contraseña
- Verificar la contraseña durante el inicio de sesión
- Generar JWT firmado
Fuente: https://dev.to/zeroshotanu/fastapi-for-ai-engineers-part-6-jwt-authentication-in-fastapi-5fpk
Comunidad de aprendizaje opcional: https://t.me/GyaanSetuAi