Microservicio de autenticación, gestión de usuarios, roles básicos y validaciones de identidad para el ecosistema de microservicios del proyecto.
Este servicio expone endpoints de login, refresh token, logout, registro de participantes, consulta/gestión de usuarios y validación de elegibilidad para committee.
- Java 21
- PostgreSQL local o remoto
- Gradle Wrapper incluido en el repo
- Docker opcional, solo para ejecutar tests de persistencia con Testcontainers
Por defecto el servicio usa:
spring.application.name=iam-service
server.port=8081
spring.datasource.url=jdbc:postgresql://localhost:5432/iam_db
spring.datasource.username=iam_service_user
spring.datasource.password=iam_passwordVariables recomendadas para ambientes reales:
SECURITY_JWT_SECRET=<secret-de-32+-caracteres>
SECURITY_JWT_EXPIRATION_MINUTES=15
SECURITY_JWT_REFRESH_EXPIRATION_DAYS=7Para ejecución con Eureka:
EUREKA_SERVER_URL=http://localhost:8761/eureka/Crear la base de datos y usuario esperados por `application.properties
Luego, dentro de la base iam_db, asegurar permisos sobre el schema público.
Las migraciones se ejecutan con Flyway al arrancar el servicio.
Windows:
.\gradlew clean compileJavaLinux/macOS:
./gradlew clean compileJavaUsar este modo cuando se quiere ejecutar IAM solo (por desarrollo, debug, etc.), sin Eureka Server ni Gateway.
Windows:
.\gradlew bootRunLinux/macOS:
./gradlew bootRunURL base directa:
http://localhost:8081
En este modo Eureka queda deshabilitado por defecto:
eureka.client.enabled=falseUsar este modo cuando ya esté levantado el Eureka Server y el servicio deba registrarse para ser consumido por el Gateway.
Orden recomendado:
1. Eureka Server
2. IAM Service con perfil discovery
3. API Gateway
4. Frontend / App
Windows:
.\gradlew bootRun --args="--spring.profiles.active=discovery"Linux/macOS:
./gradlew bootRun --args="--spring.profiles.active=discovery"Con variable explícita de Eureka:
Windows PowerShell:
$env:EUREKA_SERVER_URL="http://localhost:8761/eureka/"
.\gradlew bootRun --args="--spring.profiles.active=discovery"Linux/macOS:
EUREKA_SERVER_URL=http://localhost:8761/eureka/ ./gradlew bootRun --args="--spring.profiles.active=discovery"El perfil discovery usa:
eureka.client.enabled=true
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=${EUREKA_SERVER_URL:http://localhost:8761/eureka/}IAM por ahora solo se registra en Eureka. No descubre ni llama otros microservicios desde este repo.
Ejecutar toda la suite:
Windows:
.\gradlew testLinux/macOS:
./gradlew testSi no hay Docker/Testcontainers disponible en local, ejecutar tests omitiendo Tests de persistencia:
Windows:
.\gradlew test -PskipPersistenceTests=trueLinux/macOS:
./gradlew test -PskipPersistenceTests=trueLos tests de persistencia usan PostgreSQL Testcontainers y requieren Docker activo.
Generar reporte local sin tests de persistencia:
Windows:
.\gradlew test jacocoTestReport jacocoTestCoverageVerification -PskipPersistenceTests=trueLinux/macOS:
./gradlew test jacocoTestReport jacocoTestCoverageVerification -PskipPersistenceTests=trueQuality gate completo, con Testcontainers activo:
Windows:
.\gradlew.bat test jacocoTestReport jacocoTestCoverageVerificationLinux/macOS:
./gradlew test jacocoTestReport jacocoTestCoverageVerificationReportes generados:
build/reports/jacoco/test/html/index.html
build/reports/jacoco/test/jacocoTestReport.xml
Con el servicio levantado:
Swagger UI:
http://localhost:8081/swagger-ui.html
OpenAPI JSON:
http://localhost:8081/v3/api-docs
Los endpoints protegidos usan Bearer JWT. En Swagger UI se debe usar el botón Authorize y pegar el access token con formato Bearer.
Endpoints habilitados:
http://localhost:8081/actuator/health
http://localhost:8081/actuator/info
Auth:
POST /auth/login
POST /auth/refresh
POST /auth/logout
Users:
POST /users/register
GET /users/me
GET /users/{id}
PUT /users/{id}
GET /users/{id}/can-be-committee
GET /users
PATCH /users/{id}/activate
PATCH /users/{id}/deactivate
POST /users/system-admins
POST /users/congress-admins
POST /users/guest-speakers
Para request/response, errores, roles y ejemplos, usar Swagger UI.
Modo individual:
./gradlew bootRunModo con Eureka:
./gradlew bootRun --args="--spring.profiles.active=discovery"Tests locales sin Docker:
./gradlew test -PskipPersistenceTests=trueTests completos con Docker:
./gradlew test