Skip to main content

Reusable Keycloak SDK for auth-service and microservices

Project description

Auth Guardian

auth-guardian es una libreria Python para proteger APIs con Keycloak/OIDC en FastAPI, con configuracion minima y enfoque plug-and-play.

Que resuelve

  • Login OIDC sin escribir todo el flujo a mano.
  • Proteccion de endpoints autenticados.
  • Control por roles (admin, support, etc.).
  • Helpers para validacion de tokens y extraccion de roles.

Instalacion

pip install auth-guardian

Configuracion minima

Define estas variables de entorno:

AUTH_BASE_URL=https://auth.tu-dominio.com
AUTH_REALM=tu-realm
AUTH_CLIENT_ID=tu-cliente

Tambien se aceptan alias legacy:

  • KEYCLOAK_BASE_URL
  • KEYCLOAK_REALM
  • KEYCLOAK_CLIENT_ID

Revocación de tokens

Escenario Comportamiento
Single instance (default) Revocación inmediata en memoria local
Multi-instancia Token válido hasta expirar en otras instancias
Con RevocationBackend propio Revocación inmediata global

Al hacer logout, siempre ocurre:

  • refresh_token revocado en Keycloak (no puede renovarse)
  • Cookies borradas del navegador
  • access_token en blacklist local hasta expirar

Para multi-instancia, implementa RevocationBackend con tu stack:

from auth_guardian import AuthGuardian, RevocationBackend

class SharedCacheRevocationBackend(RevocationBackend):
    async def revoke(self, jti: str, ttl: int) -> None: ...
    async def is_revoked(self, jti: str) -> bool: ...

auth = AuthGuardian(revocation_backend=SharedCacheRevocationBackend())

Uso rapido en FastAPI

from fastapi import Depends, FastAPI
from auth_guardian import AuthGuardian, create_auth_router

app = FastAPI()
auth = AuthGuardian()

app.include_router(
    create_auth_router(
        auth=auth,
        login_redirect_url="/dashboard",
        logout_redirect_url="/login",
    )
)

@app.get("/health")
async def health() -> dict[str, str]:
    return {"status": "ok"}

@app.get("/ejemplo/v1")
async def ejemplo_v1(user: dict = Depends(auth.get_current_user)):
    return {
        "mensaje": f"Hola {user.get('preferred_username')}",
        "email": user.get("email"),
    }

@app.get("/ejemplo/v2")
async def ejemplo_v2(user: dict = Depends(auth.require_role("admin"))):
    return {"mensaje": "Acceso permitido para rol admin"}

Con esto tienes:

  • GET /login
  • GET /oidc/callback
  • GET /logout
  • Proteccion por usuario autenticado y por rol.

Casos de uso comunes

  • Proteger endpoints internos de microservicios.
  • Habilitar login/logout en apps FastAPI sin implementar OIDC desde cero.
  • Restringir secciones administrativas por rol.
  • Validar tokens manualmente en procesos asincronos o workers.

Ejemplo de validacion manual

payload = await auth.get_validator().decode_access_token(token)
print(payload.get("sub"))

Caracteristicas opcionales

Multi-tenant (multiples realms)

from fastapi import Request

async def resolve_tenant(request: Request) -> str | None:
    return request.headers.get("X-Tenant-ID")

auth = AuthGuardian(tenant_resolver=resolve_tenant)

API publica estable

  • AuthGuardian
  • create_auth_router
  • extract_client_roles(payload, client_id)
  • AuthConfig
  • AuthTokenValidator
  • AuthOIDCClient
  • KeycloakAuthError
  • TokenValidationError
  • KeycloakAPIError

Buenas practicas

  • Usa variables de entorno por ambiente (dev/stage/prod).
  • No hardcodees secretos en codigo fuente.
  • Fija version en produccion (auth-guardian==x.y.z).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

auth_guardian-0.1.7.tar.gz (18.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

auth_guardian-0.1.7-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file auth_guardian-0.1.7.tar.gz.

File metadata

  • Download URL: auth_guardian-0.1.7.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for auth_guardian-0.1.7.tar.gz
Algorithm Hash digest
SHA256 0b51ce8941993c3834b253c37b8ee40b7761b9a33e05b7dba335efd17105ffa4
MD5 a0d1f3b0dc9899c7730cd53b0b49fc6d
BLAKE2b-256 1882ea5b16e0ddb75a7e6b5f21fc8a38453b2705819eb53dea907fbd3bf0e9e6

See more details on using hashes here.

File details

Details for the file auth_guardian-0.1.7-py3-none-any.whl.

File metadata

  • Download URL: auth_guardian-0.1.7-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.12

File hashes

Hashes for auth_guardian-0.1.7-py3-none-any.whl
Algorithm Hash digest
SHA256 24957daeda2dfa19b76ccca73c527ac59b5554a3a8d1ed7fb9ca6e2b3d37bd37
MD5 ce567318acdd57762de677d27ffae4d5
BLAKE2b-256 52198d279a701b0cb84913c6cb5eaabe5d60b26f0bc73d970c4276e82e23545e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page