Este laboratorio extiende la Parte 1 (Lab_P1_BluePrints_Java21_API) agregando seguridad a la API usando Spring Boot 3, Java 21 y JWT (OAuth 2.0).
El API se convierte en un Resource Server protegido por tokens Bearer firmados con RS256.
Incluye un endpoint didáctico /auth/login que emite el token para facilitar las pruebas.
- Implementar seguridad en servicios REST usando OAuth2 Resource Server.
- Configurar emisión y validación de JWT.
- Proteger endpoints con roles y scopes (
blueprints.read,blueprints.write). - Integrar la documentación de seguridad en Swagger/OpenAPI.
- JDK 21
- Maven 3.9+
- Git
-
Clonar o descomprimir el proyecto:
git clone https://github.com/DECSIS-ECI/Lab_P2_BluePrints_Java21_API_Security_JWT.git cd Lab_P2_BluePrints_Java21_API_Security_JWTó si el profesor entrega el
.zip, descomprimirlo y entrar en la carpeta. -
Ejecutar con Maven:
mvn -q -DskipTests spring-boot:run
-
Verificar que la aplicación levante en
http://localhost:8080.
POST http://localhost:8080/auth/login
Content-Type: application/json
{
"username": "student",
"password": "student123"
}
Respuesta:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"expires_in": 3600
}GET http://localhost:8080/api/blueprints
Authorization: Bearer <ACCESS_TOKEN>
POST http://localhost:8080/api/blueprints
Authorization: Bearer <ACCESS_TOKEN>
Content-Type: application/json
{
"name": "Nuevo Plano"
}
- URL: http://localhost:8080/swagger-ui/index.html
- Pulsa Authorize, ingresa el token en el formato:
Bearer eyJhbGciOi...
src/main/java/co/edu/eci/blueprints/
├── api/BlueprintController.java # Endpoints protegidos
├── auth/AuthController.java # Login didáctico para emitir tokens
├── config/OpenApiConfig.java # Configuración Swagger + JWT
└── security/
├── SecurityConfig.java
├── MethodSecurityConfig.java
├── JwtKeyProvider.java
├── InMemoryUserService.java
└── RsaKeyProperties.java
src/main/resources/
└── application.yml
- Revisar el código de configuración de seguridad (
SecurityConfig) e identificar cómo se definen los endpoints públicos y protegidos. - Explorar el flujo de login y analizar las claims del JWT emitido.
- Extender los scopes (
blueprints.read,blueprints.write) para controlar otros endpoints de la API, del laboratorio P1 trabajado. - Modificar el tiempo de expiración del token y observar el efecto.
- Documentar en Swagger los endpoints de autenticación y de negocio.
- Spring Security Reference – OAuth2 Resource Server
- Spring Boot – Securing Web Applications
- JSON Web Tokens – jwt.io
Proyecto educativo con fines académicos – Escuela Colombiana de Ingeniería Julio Garavito.