Menu ▾ ▴

Tree [0f5b0a] master /
 History

HTTPS access


File Date Author Commit
 app 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 bootstrap 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 config 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 database 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 docs 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 local_kms 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 nginx 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 public 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 resources 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 routes 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 scripts 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 storage 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 systemd 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 tests 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 .dockerignore 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 .env.example 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 .gitignore 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 Dockerfile 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 README.md 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 alembic.ini 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 auth.sh 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 docker-compose.yml 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 nginx.conf 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 nginx.local.conf 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial
 pyproject.toml 3 days ago Cristian Gaitán Cristian Gaitán [0f5b0a] Commit inicial

Read Me

Enterprise Identity Server

Servidor de autorización e identidades OAuth 2.0 / OpenID Connect, headless y multi-tenant. FastAPI + SQLAlchemy + Redis, firma de JWT
(ES256/RS256) delegada a un KMS/HSM, passkeys/WebAuthn, autenticación adaptativa, RBAC, auditoría inmutable y derechos GDPR.

📚 Documentación completa: docs/README.md — manuales, referencia de API, Swagger, colección de Postman y guía de desarrollo.

Arranque rápido (desarrollo)

uv venv --python 3.14t .venv && source .venv/bin/activate   # Python 3.14 free-threaded
uv pip install -e '.[dev]'
redis-server &                                   # Redis es obligatorio
export BOOTSTRAP_ADMIN_CLIENT_SECRET="$(python -c 'import secrets;print(secrets.token_urlsafe(48))')"
python -m app.console migrate && python -m app.console db:seed
python -m app.console serve --reload             # http://localhost:8000
pytest                                           # 153 pruebas

No se crean clientes ni usuarios de demostración. Más detalle en desarrollo/instalacion.md.

Instalador (como db-studio)

./auth.sh abre un panel de control con menú (iniciar, detener, reiniciar, estado, logs, diagnóstico) y una opción Instalar / actualizar / desinstalar que prepara Python 3.14t, el .env con secretos aleatorios, la base de datos, Redis, las migraciones, el primer operador del panel, nginx y los servicios systemd. También por subcomandos: ./auth.sh install --yes, ./auth.sh doctor. Detalle en docs/desarrollo/instalador.md.

Con nginx local (sin Docker)

./scripts/dev_stack.sh start levanta Redis + servicio + un nginx propio en https://localhost:8443 (no toca el nginx del sistema). Para el dominio https://auth-api.test como los demás aplicativos: sudo ./nginx/install.sh. Detalle en docs/desarrollo/instalacion.md.

Panel de control

Interfaz web (/panel, usuario y contraseña de operador) para ver el tráfico en vivo, gestionar las colas, ajustar parámetros de rendimiento sin reiniciar y administrar accesos.
python -m app.console operator:create admin --role admin y abre http://localhost:8000/panel. Manual: docs/manuales/manual-panel.md.

Estructura

app/         console · exceptions · http (controllers, middleware, requests, kernel) · models · providers · services · support
bootstrap/   create_app() y lista de providers        config/    un archivo por dominio (config("archivo.clave"))
database/    migrations (Alembic) · seeders · factories   routes/    web.py y api.py        public/index.py  punto de entrada ASGI
tests/       feature · unit · support                docs/      documentación    local_kms/  KMS de referencia

Explicación de capas y ciclo de vida de una petición: arquitectura/estructura.md.

Comandos útiles

python -m app.console list           # o: idp list
python -m app.console route:list
python -m app.console config:check   # valida la configuración del entorno (falla si la producción es insegura)
python -m app.console docs:generate  # OpenAPI, Swagger y referencia de endpoints
python -m app.console docs:postman   # colección y entorno de Postman

Producción

cp .env.example .env, rellena los secretos y docker compose up --build. Solo el gateway (TLS 1.2+) publica puertos.
Lista de comprobación y operación en manuales/manual-operaciones.md.

Límites conocidos

  • Requiere Python 3.14t (sin GIL). psycopg va en modo puro-Python (necesita libpq5) porque psycopg-binary no tiene wheels cp314t.
  • El KMS incluido es de referencia (no un HSM). PostgreSQL, Redis en modo clúster y docker compose no se han ejecutado en el entorno de desarrollo.
  • Sin TOTP, recuperación de contraseña ni verificación de email. Sin endpoint para suspender un tenant o deshabilitar un usuario.