Saltar a contenido

Autenticación

El servicio usa JWT con dos tokens:

  • Access token: se envía como header Authorization: Bearer <token> en cada request protegida. Contiene, entre otros, los claims dni y role, usados por algunos controladores para autorización.
  • Refresh token: se envía con el prefijo literal Refresh (por ejemplo, Refresh <token>) al endpoint /api/auth/refreshtoken para obtener un nuevo par de tokens.

Rutas públicas (no requieren token): /api/auth/**, /api-docs/**, /v3/**, /swagger-ui/**, /swagger-resources/**, /error/**. Cualquier otra ruta requiere autenticación (WebSecurityConfig, sesión STATELESS).

Roles disponibles (ERole): ROLE_USER, ROLE_ADMIN, ROLE_SUPER. Se crean automáticamente al iniciar la aplicación (RoleDataInitializer).

Nota de seguridad: al registrar un usuario (/api/auth/signup) el cliente indica en el body qué rol(es) quiere (user, admin, super). No hay validación de que quien llama al endpoint tenga permiso para asignarse esos roles — cualquier registro puede pedir admin o super.

Endpoints

Base URL: /api/auth

Método Ruta Auth Body/Params Descripción
POST /signin No Body: username, password Inicia sesión y retorna access/refresh token junto con el id y roles del usuario.
POST /signup No Body: username, password, email, firstName, lastName, dni, tuition?, authorization?, role[] Registra un usuario nuevo (username/email/dni únicos) y asigna roles (user por defecto si no se envía role). tuition y authorization son opcionales.
POST /refreshtoken No Body: refreshToken (con prefijo Refresh) Valida el refresh token y genera un nuevo access + refresh token.
POST /{id}/upload-signature-img Sí Header Authorization; Multipart file Sube la imagen de firma del usuario {id} y actualiza signatureImg.
DELETE /delete/{dni} Sí Header Authorization Deshabilita lógicamente al usuario (status = DELETED).
PUT /user/{dni} Sí Header Authorization; Params oldPassword, newPassword Cambia la contraseña; valida que el dni del token coincida con el del path.

Ejemplos

Registro (signup)

curl -X POST http://localhost:8080/api/auth/signup \
  -H "Content-Type: application/json" \
  -d '{
    "username": "jperez",
    "password": "Segura123!",
    "email": "jperez@empresa.com",
    "firstName": "Juan",
    "lastName": "Pérez",
    "dni": "12345678",
    "tuition": "MP12345",
    "authorization": "AUTH123456",
    "role": ["user"]
  }'

Respuesta 200 OK:

{ "message": "User with username jperez and dni 12345678 registered successfully!" }

Errores comunes: 400 BAD_REQUEST si username, email o dni ya existen.

tuition es opcional: puede omitirse del body (o enviarse vacío) para usuarios sin matrícula profesional. Si se omite, se guarda como cadena vacía y, al firmar con sign-by-label o sign-by-coord-simple, la línea CQFP: <matrícula> del bloque de firma no se pinta (independientemente del valor de printCqfp).

authorization también es opcional (no se persiste ni se usa en ningún otro flujo; solo se acepta y valida su longitud si se envía, máximo 40 caracteres).

Inicio de sesión (signin)

curl -X POST http://localhost:8080/api/auth/signin \
  -H "Content-Type: application/json" \
  -d '{ "username": "jperez", "password": "Segura123!" }'

Respuesta 200 OK (JwtResponse):

{
  "token": "Bearer eyJhbGciOiJIUzI1NiJ9...",
  "type": "Bearer ",
  "id": 1,
  "refreshToken": "eyJhbGciOiJIUzI1NiJ9...",
  "roles": ["ROLE_USER"]
}

El valor de token ya incluye el prefijo Bearer; se envía tal cual en el header Authorization de las siguientes requests.

Refrescar token

curl -X POST http://localhost:8080/api/auth/refreshtoken \
  -H "Content-Type: application/json" \
  -d '{ "refreshToken": "Refresh eyJhbGciOiJIUzI1NiJ9..." }'

El campo refreshToken debe incluir el prefijo literal Refresh (con espacio); el servidor lo recorta antes de validar el token. Si no lo incluye, responde 403 FORBIDDEN con el mensaje You must add 'Refresh ' to the value of refreshToken.

Respuesta 200 OK: mismo formato que signin (JwtResponse), con un nuevo access y refresh token.

Subir imagen de firma

curl -X POST http://localhost:8080/api/auth/1/upload-signature-img \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." \
  -F "file=@firma.png"

La imagen se guarda en SIGNATURE_IMAGES_PATH con el nombre user_<id>_<uuid>.<extensión original> y se usa por defecto cuando se firma con hasImageSignature=true (ver Documentos).

Deshabilitar usuario

curl -X DELETE http://localhost:8080/api/auth/delete/12345678 \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..."

Marca status = DELETED en el usuario; no elimina el registro físicamente.

Cambiar contraseña

curl -X PUT "http://localhost:8080/api/auth/user/12345678?oldPassword=Segura123!&newPassword=NuevaSegura456!" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..."

El dni del path debe coincidir con el claim dni del token; si no coincide, responde 400 BAD_REQUEST con "The passed token corresponds to another user".