Autenticación
Todas las peticiones a la Web API deben autenticarse. Crono usa un esquema de autenticación propio, llamado Api, y sobre él aplica la misma autorización por permisos que el resto del sistema. Las operaciones quedan además acotadas al usuario y la organización de la credencial.
Esquema de autenticación Api
El controlador base CronoApiController exige el esquema Api para todos sus endpoints:
[Authorize(AuthenticationSchemes = "Api")]
public class CronoApiController : ControllerBase
{
// ...
}
Esto significa que cada solicitud debe presentar una credencial válida que el manejador del esquema Api reconozca. Sin credencial válida, la respuesta es 401 Unauthorized antes de llegar a la acción.
Autorización por permiso
Autenticarse no basta: cada endpoint declara el permiso que requiere con [Permiso(...)], evaluado por el rol y la organización del usuario autenticado (ver Seguridad):
[HttpGet("funciones"), MapToApiVersion("1")]
[ProducesResponseType(typeof(List<FuncionRutaDto>), Status200OK)]
[Permiso(RutasCobranzaPermisos.Ver)]
public async Task<IActionResult> ObtenerFunciones(CancellationToken cancelToken)
{
var funciones = await _rutaCobranzaServicio.ObtenerFuncionesRutaAsync(cancelToken);
return Ok(funciones);
}
Si el usuario está autenticado pero no tiene el permiso, la respuesta es 403 Forbidden.
Alcance por usuario y organización
La identidad autenticada define el contexto de la llamada: el ITrabajoContexto expone el usuario actual y el IOrganizacionContexto la organización activa (ver Identidad y Multiorganización). Por eso muchos endpoints operan implícitamente sobre "lo mío": por ejemplo, la ruta de cobranza devuelve las rutas del asesor autenticado, no las de todos. Esto evita fugas de datos entre organizaciones y entre usuarios.
CORS
La API aplica una política CORS con nombre (WebApiCorsPolitica) mediante [EnableCors("WebApiCorsPolitica")] en el controlador base, de modo que solo los orígenes permitidos por esa política pueden llamarla desde un navegador.
Buenas prácticas
- Trata la credencial de API como un secreto: no la incrustes en clientes públicos ni en el control de versiones.
- Concede a cada credencial solo los permisos que necesita (principio de mínimo privilegio).
- Maneja explícitamente los
401/403en el cliente para distinguir "no autenticado" de "sin permiso".