Tiendas Mi Cholo utiliza JSON Web Tokens (JWT) firmados con el algoritmo HMAC-SHA256 para autenticar todas las peticiones a la API. El sistema es completamente stateless: el servidor no almacena sesiones; en cambio, cada petición debe incluir un token válido en el headerDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/Miercoles-Proyecto/llms.txt
Use this file to discover all available pages before exploring further.
Authorization. Al hacer login recibirás dos tokens: un access token de corta duración para las peticiones del día a día, y un refresh token de larga duración para renovarlo sin necesidad de volver a ingresar credenciales.
Rutas públicas (sin autenticación)
Las siguientes rutas no requieren token y son accesibles para cualquier cliente:| Ruta | Métodos |
|---|---|
/api/auth/** | Todos |
/api/actuator/** | Todos |
Authorization.
Cómo iniciar sesión
POST /api/auth/login
Envía las credenciales del usuario para obtener los tokens JWT.
URL: http://localhost:8080/api/auth/loginAutenticación requerida: No
Content-Type:
application/json
Campos de la petición
Nombre de usuario registrado en el sistema (por ejemplo:
admin, jperez, mgarcia).Contraseña del usuario. Mínimo 6 caracteres. Se verifica contra el hash BCrypt almacenado en la base de datos.
Ejemplo con cURL
Ejemplo con JavaScript Fetch
Campos de la respuesta 200 OK
Access token JWT firmado con HMAC-SHA256. Incluye en el header
Authorization: Bearer <token> en cada petición protegida. Válido por 24 horas (app.jwt.expiration=86400000 ms).Refresh token JWT para renovar el access token sin requerir nuevas credenciales. Válido por 7 días (
app.jwt.refresh-expiration=604800000 ms).Nombre de usuario con el que se autenticó.
Nombre de pila del usuario autenticado.
Apellido del usuario autenticado.
Correo electrónico del usuario autenticado.
Rol asignado al usuario:
ADMIN, VENDEDOR o ALMACENERO.Respuesta de ejemplo 200 OK
Los dos tokens: acceso y refresco
El sistema emite dos tokens distintos con propósitos y duraciones diferentes:| Token | Claim principal | Duración | Uso |
|---|---|---|---|
Access token (token) | subject (username) + roles | 24 horas (86 400 000 ms) | Autenticar cada petición protegida |
Refresh token (refreshToken) | subject (username) | 7 días (604 800 000 ms) | Renovar el access token expirado |
sub—usernamedel usuarioroles— lista de roles, por ejemplo["ROLE_ADMIN"]iat— timestamp de emisiónexp— timestamp de expiración
Cómo usar el token en cada petición
Incluye el access token en el header HTTPAuthorization con el esquema Bearer:
Ejemplo con cURL
Ejemplo con JavaScript Fetch
Ejemplo con Angular HttpClient
El frontend de Tiendas Mi Cholo utiliza un HTTP interceptor que adjunta automáticamente el token a todas las peticiones salientes. La clave de almacenamiento enlocalStorage es tienda_token.
Matriz de permisos por módulo y rol
La siguiente tabla muestra qué operaciones puede realizar cada rol en cada módulo de la API:| Módulo | Operación | ADMIN | VENDEDOR | ALMACENERO |
|---|---|---|---|---|
| Auth | Login | ✅ | ✅ | ✅ |
| Usuarios | CRUD completo | ✅ | ❌ | ❌ |
| Roles | Listar | ✅ | ✅ | ✅ |
| Categorías | Listar / Ver | ✅ | ✅ | ✅ |
| Categorías | Crear / Editar / Eliminar | ✅ | ❌ | ❌ |
| Productos | Listar / Ver / Buscar | ✅ | ✅ | ✅ |
| Productos | Crear / Editar | ✅ | ❌ | ✅ |
| Productos | Eliminar | ✅ | ❌ | ❌ |
| Clientes | CRUD completo | ✅ | ✅ | ✅ |
| Proveedores | CRUD completo | ✅ | ✅ | ✅ |
| Ventas | Listar / Ver | ✅ | ✅ | ✅ |
| Ventas | Registrar | ✅ | ✅ | ❌ |
| Ventas | Anular | ✅ | ❌ | ❌ |
| Compras | Listar / Ver | ✅ | ✅ | ✅ |
| Compras | Crear / Recibir | ✅ | ❌ | ✅ |
| Inventario | Listar | ✅ | ✅ | ✅ |
| Dashboard | Stats | ✅ | ✅ | ✅ |
| Reportes | PDF Ventas / Inventario | ✅ | ❌ | ❌ |
Respuestas de error de autenticación
401 Unauthorized — Token ausente, inválido o expirado
Se devuelve cuando el header Authorization está ausente, el token tiene una firma inválida, o el token ha expirado.
- No se envió el header
Authorization - El token fue manipulado (firma HMAC inválida)
- Han transcurrido más de 24 horas desde la emisión del access token
- Se usó el refresh token en lugar del access token para una petición de recurso
403 Forbidden — Rol insuficiente
Se devuelve cuando el token es válido pero el rol del usuario no tiene permiso para realizar la operación solicitada.
VENDEDOR que intenta acceder a GET /api/usuarios (exclusivo de ADMIN) recibirá un 403 Forbidden.