OAuth2Server es un servidor de autenticación basado en Spring Boot que emite tokens JWT firmados. Sirve para que otras aplicaciones puedan autenticar usuarios de forma segura.
Este proyecto implementa Arquitectura Hexagonal (Ports and Adapters) para mantener el código limpio, testeable y desacoplado del framework.
src/main/java/com/oauth/
├── domain/ # 🔵 NÚCLEO - Sin dependencias externas
│ ├── exception/ # Excepciones del dominio
│ ├── model/ # Entidades y value objects
│ └── ports/ # Interfaces (contratos)
│ └── in/ # Puertos de entrada
│
├── application/ # 🟢 CASOS DE USO
│ └── usecase/ # Implementaciones de use cases
│
├── adapters/ # 🟡 ADAPTADORES EXTERNOS
│ ├── input/ # Adaptadores de entrada (Driven)
│ │ └── rest/ # Controladores REST
│ │
│ └── output/ # Adaptadores de salida (Driving)
│ ├── persistence/ # Repositorios JPA
│ └── security/ # Adaptadores de seguridad
│
├── infrastructure/ # 🟠 INFRAESTRUCTURA
│ └── service/ # Servicios específicos del framework
│
└── config/ # 🔴 Configuración Spring
- Dominio limpio: La lógica de negocio no depende de frameworks
- Puertos: Interfaces que definen contratos entre capas
- Adaptadores: Implementaciones concretas de los puertos
- Inversión de dependencias: Las dependencias apuntan hacia el dominio
- Java 21
- Maven 3.9+
- Docker y Docker Compose
# 1. Clonar el proyecto
git clone https://github.com/FelixMarin/OAuth2Server.git
cd OAuth2Server
# 2. Ejecutar con Docker Compose (incluye PostgreSQL)
docker-compose up --build
# 3. Acceder a la aplicación
# http://localhost:8080 (desarrollo)Al iniciar por primera vez, se crea un usuario administrador:
| Campo | Valor |
|---|---|
| Usuario | admin |
| Contraseña | admin123 |
- Abre http://localhost:8080/login
- Inicia sesión con admin / admin123
- Verás la página de consentimiento OAuth2
La aplicación usa PostgreSQL en todos los entornos (desarrollo y producción).
El archivo docker-compose.yml configura automáticamente:
- PostgreSQL en el puerto 5432
- Base de datos:
oauth2_dev - Usuario:
oauth2_user - Contraseña:
oauth2_dev_password
Consulta docker-compose.prod.yml para la configuración de producción.
| Variable | Descripción | Ejemplo |
|---|---|---|
SERVER_PORT |
Puerto de la aplicación | 8080 |
SPRING_DATASOURCE_URL |
URL de PostgreSQL | jdbc:postgresql://postgres:5432/oauth2_dev |
SPRING_DATASOURCE_USERNAME |
Usuario de BD | oauth2_user |
SPRING_DATASOURCE_PASSWORD |
Contraseña de BD | oauth2_dev_password |
JWT_SIGNING_KEY |
Clave para firmar tokens JWT | clave-secreta |
CORS_ALLOWED_ORIGINS |
Orígenes permitidos para CORS | http://localhost:3000 |
dev: Desarrollo (usa PostgreSQL en docker-compose)prod: Producción (configuración optimizada)
Para que la aplicación pueda usar OAuth2, necesitas registrarla mediante variables de entorno:
# Configurar cliente OAuth2
OAUTH2_CLIENTS=CINE_PLATFORM,TRANSCRIBERAPP
# Cliente 1
CINE_PLATFORM_SECRET=mi-secreto-seguro
CINE_PLATFORM_REDIRECT_URI=http://localhost:3000/oauth/callback
# Cliente 2
TRANSCRIBERAPP_SECRET=otra-secreto
TRANSCRIBERAPP_REDIRECT_URI=http://localhost:9000/oauth/callback1. Redirige al usuario a:
http://localhost:8080/oauth2/authorize?
response_type=code&
client_id=mi-aplicacion&
redirect_uri=http://localhost:3000/callback&
scope=openid%20profile%20read%20write&
state=texto-aleatorio
2. El usuario se loguea en OAuth2Server
3. La app recibe un código en el callback:
http://localhost:3000/callback?code=XYZ123&state=texto-aleatorio
4. Canjea el código por tokens:
curl -X POST http://localhost:8080/oauth2/token \
-u "mi-aplicacion:mi-secreto-seguro" \
-d "grant_type=authorization_code" \
-d "code=CODIGO_RECIBIDO" \
-d "redirect_uri=http://localhost:3000/callback"5. Respuesta (tokens):
{
"access_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 86400,
"refresh_token": "abc...",
"scope": "openid profile read write"
}Sin usuario, solo para comunicación entre servicios:
curl -X POST http://localhost:8080/oauth2/token \
-u "mi-aplicacion:mi-secreto-seguro" \
-d "grant_type=client_credentials" \
-d "scope=read write"El archivo docker-compose.yml incluye:
- OAuth2Server - Puerto 8080
- PostgreSQL - Puerto 5432
# Iniciar servicios
docker-compose up --build
# Ver logs
docker-compose logs -f
# Detener servicios
docker-compose down| Endpoint | Método | Descripción |
|---|---|---|
/oauth2/authorize |
GET | Iniciar login OAuth2 |
/oauth2/token |
POST | Obtener tokens |
/login |
GET/POST | Página de login |
/user/me |
GET | Info del usuario actual |
/user |
POST | Crear usuario |
# Ejecutar tests
mvn test
# Ver cobertura
mvn verifyNo puedo iniciar sesión
- Verifica que el usuario existe en la base de datos
- Prueba con las credenciales por defecto: admin / admin123
Error de redirect_uri
- Asegúrate de que la URL de callback está configurada mediante variables de entorno
Error de conexión a PostgreSQL
- Verifica que el contenedor de PostgreSQL está corriendo
- Comprueba las credenciales en las variables de entorno
- La base de datos es PostgreSQL (no H2)
- Los tokens JWT se firman con una clave configurada en las variables de entorno
- La configuración sensible se gestiona mediante variables de entorno (no hardcoded)
MIT