ste commit introduce un sistema completo de autenticación basado en JSON Web Tokens (JWT) para proteger los endpoints de la API y gestionar el acceso de los usuarios a la aplicación.
**Cambios en el Backend (ASP.NET Core):**
- Se ha creado un nuevo `AuthController` con un endpoint `POST /api/auth/login` para validar las credenciales del usuario.
- Implementada la generación de tokens JWT con una clave secreta y emisor/audiencia configurables desde `appsettings.json`.
- Se ha añadido una lógica de expiración dinámica para los tokens:
- **6 horas** para sesiones temporales (si el usuario no marca "Mantener sesión").
- **1 año** para sesiones persistentes.
- Se han protegido todos los controladores existentes (`EquiposController`, `SectoresController`, etc.) con el atributo `[Authorize]`, requiriendo un token válido para su acceso.
- Actualizada la configuración de Swagger para incluir un campo de autorización "Bearer Token", facilitando las pruebas de los endpoints protegidos desde la UI.
**Cambios en el Frontend (React):**
- Se ha creado un componente `Login.tsx` que actúa como la puerta de entrada a la aplicación.
- Implementado un `AuthContext` para gestionar el estado global de autenticación (`isAuthenticated`, `token`, `isLoading`).
- Añadida la funcionalidad "Mantener sesión iniciada" a través de un checkbox en el formulario de login.
- Si está marcado, el token se guarda en `localStorage`.
- Si está desmarcado, el token se guarda en `sessionStorage` (la sesión se cierra al cerrar el navegador/pestaña).
- La función `request` en `apiService.ts` ha sido refactorizada para inyectar automáticamente el `Authorization: Bearer <token>` en todas las peticiones a la API.
- Se ha añadido un botón de "Cerrar Sesión" en la barra de navegación que limpia el token y redirige al login.
- Corregido un bug que provocaba un bucle de recarga infinito después de un inicio de sesión exitoso debido a una condición de carrera.
112 lines
3.5 KiB
JSON
112 lines
3.5 KiB
JSON
{
|
|
"format": 1,
|
|
"restore": {
|
|
"E:\\Inventario-IT\\backend\\Inventario.API.csproj": {}
|
|
},
|
|
"projects": {
|
|
"E:\\Inventario-IT\\backend\\Inventario.API.csproj": {
|
|
"version": "1.0.0",
|
|
"restore": {
|
|
"projectUniqueName": "E:\\Inventario-IT\\backend\\Inventario.API.csproj",
|
|
"projectName": "Inventario.API",
|
|
"projectPath": "E:\\Inventario-IT\\backend\\Inventario.API.csproj",
|
|
"packagesPath": "C:\\Users\\dmolinari\\.nuget\\packages\\",
|
|
"outputPath": "E:\\Inventario-IT\\backend\\obj\\",
|
|
"projectStyle": "PackageReference",
|
|
"fallbackFolders": [
|
|
"D:\\Microsoft\\VisualStudio\\Microsoft Visual Studio\\Shared\\NuGetPackages"
|
|
],
|
|
"configFilePaths": [
|
|
"C:\\Users\\dmolinari\\AppData\\Roaming\\NuGet\\NuGet.Config",
|
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
|
|
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
|
|
],
|
|
"originalTargetFrameworks": [
|
|
"net9.0"
|
|
],
|
|
"sources": {
|
|
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
|
|
"https://api.nuget.org/v3/index.json": {}
|
|
},
|
|
"frameworks": {
|
|
"net9.0": {
|
|
"targetAlias": "net9.0",
|
|
"projectReferences": {}
|
|
}
|
|
},
|
|
"warningProperties": {
|
|
"warnAsError": [
|
|
"NU1605"
|
|
]
|
|
},
|
|
"restoreAuditProperties": {
|
|
"enableAudit": "true",
|
|
"auditLevel": "low",
|
|
"auditMode": "direct"
|
|
},
|
|
"SdkAnalysisLevel": "9.0.300"
|
|
},
|
|
"frameworks": {
|
|
"net9.0": {
|
|
"targetAlias": "net9.0",
|
|
"dependencies": {
|
|
"Dapper": {
|
|
"target": "Package",
|
|
"version": "[2.1.66, )"
|
|
},
|
|
"Microsoft.AspNetCore.Authentication.JwtBearer": {
|
|
"target": "Package",
|
|
"version": "[9.0.9, )"
|
|
},
|
|
"Microsoft.AspNetCore.OpenApi": {
|
|
"target": "Package",
|
|
"version": "[9.0.5, )"
|
|
},
|
|
"Microsoft.Data.SqlClient": {
|
|
"target": "Package",
|
|
"version": "[6.1.1, )"
|
|
},
|
|
"Microsoft.EntityFrameworkCore.Design": {
|
|
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
|
|
"suppressParent": "All",
|
|
"target": "Package",
|
|
"version": "[9.0.9, )"
|
|
},
|
|
"Microsoft.EntityFrameworkCore.SqlServer": {
|
|
"target": "Package",
|
|
"version": "[9.0.9, )"
|
|
},
|
|
"SSH.NET": {
|
|
"target": "Package",
|
|
"version": "[2025.0.0, )"
|
|
},
|
|
"Swashbuckle.AspNetCore": {
|
|
"target": "Package",
|
|
"version": "[9.0.6, )"
|
|
}
|
|
},
|
|
"imports": [
|
|
"net461",
|
|
"net462",
|
|
"net47",
|
|
"net471",
|
|
"net472",
|
|
"net48",
|
|
"net481"
|
|
],
|
|
"assetTargetFallback": true,
|
|
"warn": true,
|
|
"frameworkReferences": {
|
|
"Microsoft.AspNetCore.App": {
|
|
"privateAssets": "none"
|
|
},
|
|
"Microsoft.NETCore.App": {
|
|
"privateAssets": "all"
|
|
}
|
|
},
|
|
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.300/PortableRuntimeIdentifierGraph.json"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |