Autenticación¶
Endpoints para login, registro y gestión de tokens JWT.
Endpoints¶
POST /auth/login¶
Inicia sesión con credenciales y devuelve token JWT.
Request:
Response 200:
{
"idUsuario": 1,
"nombre": "Admin",
"rol": "ADMIN",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"idPsicologo": null,
"idPaciente": null
}
Errores:
401— Credenciales inválidas404— Usuario no encontrado
POST /auth/register-paciente¶
Registra un nuevo paciente.
Request:
{
"usuario": {
"nombre": "Juan",
"apellido": "Pérez",
"email": "juan@example.com",
"password": "contraseña123",
"dni": "12345678"
},
"fechaNacimiento": "1990-01-15",
"genero": "Masculino",
"telefono": "600123456",
"direccion": [
{
"calle": "Calle 123",
"ciudad": "Madrid",
"provincia": "Madrid",
"codigoPostal": "28001",
"pais": "España"
}
],
"metodoPago": "PRESENCIAL",
"aceptaTerminos": true,
"aceptaVideoconferencia": true,
"aceptaComunicacion": true
}
Response 200: Mismo formato que login.
Errores:
400— Datos inválidos409— Email ya registrado
POST /auth/register-admin¶
Registra un nuevo administrador.
Request:
{
"nombre": "Nuevo Admin",
"apellido": "Apellido",
"email": "admin@amani.com",
"password": "contraseña123"
}
Response 200: Mismo formato que login.
Errores:
400— Datos inválidos409— Email ya registrado401— No autenticado (requiere rol ADMIN)
POST /auth/register-psicologo¶
Registra un nuevo psicólogo.
Request:
{
"nombre": "Psicólogo",
"apellido": "Apellido",
"email": "psicologo@amani.com",
"password": "contraseña123",
"especialidad": "Psicología Clínica",
"experiencia": 5,
"descripcion": "Psicólogo con experiencia en terapia cognitiva"
}
Response 200: Mismo formato que login.
Errores:
400— Datos inválidos409— Email ya registrado401— No autenticado (requiere rol ADMIN)
GET /auth/admins¶
Lista todos los administradores.
Response 200:
[
{
"idUsuario": 1,
"nombre": "Admin",
"apellido": "Principal",
"email": "admin@amani.com",
"rol": "ADMIN",
"activo": true
}
]
Errores:
401— No autenticado (requiere rol ADMIN)
PUT /auth/pacientes/{id}/baja¶
Da de baja a un paciente.
Path:
{id}— ID del paciente
Response 200:
Errores:
401— No autenticado404— Paciente no encontrado
Token JWT¶
Estructura del token¶
Caducidad¶
- 24 horas (86400000 ms, configurable)
Revocación¶
Actualmente no hay mecanismo de revocación. El token es válido hasta su expiración.
Ejemplo con cURL¶
# Login
curl -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"admin@amani.com","password":"admin1234"}'
# Request protegido
curl -X GET http://localhost:8080/api/psicologo \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIs..."
Checklist de autenticación¶
-
jwt.secretconfigurado enapplication.properties -
jwt.expirationconfigurado -
BCryptPasswordEncoderenSecurityConfig -
JwtAuthFilterañadido al filter chain -
UserDetailsServiceImplimplementado
Seguridad¶
Recomendaciones de producción¶
- JWT Secret: Usar clave de al menos 256 bits
- HTTPS: Siempre usar HTTPS en producción
- CORS: Configurar orígenes permitidos explícitamente
- Rate Limiting: Implementar para evitar brute force
- Password Policy: Forzar contraseñas fuertes
- Token Rotation: Considerar refresh tokens