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.
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.
./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.
./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.
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.
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.
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
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.
psycopg va en modo puro-Python (necesita libpq5) porque psycopg-binary no tiene wheels cp314t.docker compose no se han ejecutado en el entorno de desarrollo.