ASP.NET Core (Backend) + Angular (Frontend)
- ASP.NET Core
- JWT Bearer Authentication
- BCrypt (hash de contraseñas)
- Entity Framework Core
- MySQL
- Clean Architecture
- Angular
- Reactive Forms
- HttpClient
- Signals
- LocalStorage
En el backend se define la entidad User, la cual representa al usuario dentro del sistema.
Esta entidad contiene la información mínima necesaria para autenticación y autorización:
- Username
- PasswordHash
La contraseña siempre se va aguardar salteada o hasheada, no se bien como decirle
Para desacoplar la lógica interna del dominio de las entradas y salidas de la API, se crean Dtos
-
RegisterDto
Utilizado para el registro de usuarios.
Contiene:- Username
- Password
-
LoginDto
Utilizado para el inicio de sesión.
Contiene:- Password
-
AuthResponseDto
Utilizado como respuesta tanto en login como en registro.
Contiene:- UserId
- Username
- Token (JWT)
Se implementa un servicio de autenticación encargado de orquestar el proceso de registro y login, separando la lógica de negocio de los controladores.
Este servicio es responsable de:
- Validar la existencia de usuarios
- Hashear contraseñas
- Verificar credenciales
- Generar tokens JWT
El proceso de registro sigue los siguientes pasos:
- El frontend envía los datos al endpoint de registro.
- El backend valida que el email y el username no estén en uso.
- Se genera el hash de la contraseña usando BCrypt.
- Se crea la entidad User y se persiste en la base de datos.
- Se genera un token JWT para el usuario recién creado.
- Se retorna un AuthResponseDto al frontend.
Esto permite que el usuario quede autenticado inmediatamente después del registro.
El proceso de login funciona de la siguiente manera:
- El frontend envía el email y la contraseña.
- El backend busca el usuario por email.
- Se compara la contraseña ingresada con el hash almacenado usando BCrypt.
- Si las credenciales son válidas, se genera un nuevo JWT.
- Se retorna un AuthResponseDto con el token.
Para la generación del token se implementa un servicio JWT, el cual:
- Lee la clave secreta desde appsettings.json
- Construye los claims del usuario (Id, Username, Email)
- Define una fecha de expiración
El JWT es completamente stateless, lo que evita el uso de sesiones en servidor. O sea no es necesario usar cookies y eso por que estamos en Web APi en MVC seria distinto
Una vez recibido el token:
- Angular lo almacena en localStorage.
- El token se envía en cada request protegida mediante el header:
Authorization: Bearer <token>