iurban/stable/: iurban-auth-0.1.0 metadata and description

Simple index

SDK de integración con Keycloak para microapps FastAPI de iUrban (validación JWT stateless)

author_email iUrban <dev@iurban.es>
description_content_type text/markdown
requires_dist
  • fastapi>=0.111
  • httpx>=0.27
  • pydantic-settings>=2.3
  • pydantic>=2.7
  • pyjwt[crypto]>=2.9
  • mypy>=1.10; extra == 'dev'
  • pytest-asyncio>=0.23; extra == 'dev'
  • pytest>=8; extra == 'dev'
  • ruff>=0.5; extra == 'dev'
requires_python >=3.12

Because this project isn't in the mirror_whitelist, no releases from root/pypi are included.

File Tox results History
iurban_auth-0.1.0-py3-none-any.whl
Size
5 KB
Type
Python Wheel
Python
3
iurban_auth-0.1.0.tar.gz
Size
42 KB
Type
Source

iurban-auth (Python / FastAPI)

SDK de integración con el Keycloak central de iUrban para microapps FastAPI. Implementa el patrón decidido en ADR-001 (addendum 2026-06-06): validación de JWT stateless contra la JWKS de Keycloak — sin llamada en runtime a ningún servicio de auth.

Idea

from fastapi import FastAPI, Depends
from iurban_auth import current_user, require_roles, CurrentUser

app = FastAPI()

@app.get("/me")
async def me(user: CurrentUser = Depends(current_user)):
    return {"sub": user.sub, "tenant": user.tenant_id, "roles": user.roles}

@app.get("/admin", dependencies=[Depends(require_roles("admin"))])
async def admin_only():
    return {"ok": True}

Config (pydantic-settings, vía env)

Env Qué Ejemplo
IURBAN_OIDC_ISSUER URL del realm Keycloak https://auth.iurban-lab.es/realms/iurban
IURBAN_OIDC_AUDIENCE audience esperado (client_id) crm-api
IURBAN_OIDC_JWKS_TTL cache de la JWKS (s) 3600

Multi-tenant

El claim tenant_id (o tenant) se expone en CurrentUser.tenant_id para casar con la RLS de Postgres de las microapps (ADR-004). El mapeo claim→roles locales lo hace cada app (Opción A del ADR-001: Keycloak autentica, la app autoriza).

Estado

Scaffold. Falta: tests contra un Keycloak de pruebas, manejo de kid rotado, y publicación al índice privado (o install desde git-tag).