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
Documentacion oficial y paquete:
Configuracion minima
Define estas variables de entorno:
KEYCLOAK_BASE_URL=https://auth.tu-dominio.com
KEYCLOAK_REALM=tu-realm
KEYCLOAK_CLIENT_ID=tu-cliente
KEYCLOAK_CLIENT_SECRET=tu-secret
Tambien se aceptan alias legacy:
AUTH_BASE_URLAUTH_REALMAUTH_CLIENT_ID
Revocación de tokens
AuthGuardian esta orientado a revocacion inmediata con Keycloak:
- Cada request valida el token por introspection contra Keycloak.
- Si Keycloak responde
active=false, la libreria rechaza con401. - En logout, la libreria revoca el
refresh_tokenen Keycloak y borra cookies.
Modo de validación de token
AuthGuardian usa validación por introspection:
| Modo | Comportamiento |
|---|---|
introspection (default) |
Valida cada request contra Keycloak (/token/introspect) |
Uso por código (introspection ya viene por defecto):
from auth_guardian import AuthGuardian
auth = AuthGuardian()
Notas:
- Si
active=falseen introspection, se rechaza con401. - Si Keycloak no está disponible, responde
503sin exponer detalles internos. - Si cae la API de Keycloak, introspection falla aunque la BD de Keycloak siga arriba.
KEYCLOAK_CLIENT_SECRETse usa para introspection y, por defecto, para firmar/verificarstateanti-CSRF.
Variables obligatorias
Si falta una variable obligatoria, AuthGuardian registra un log de error y falla al iniciar con mensaje claro.
Variables requeridas:
KEYCLOAK_BASE_URLKEYCLOAK_REALMKEYCLOAK_CLIENT_IDKEYCLOAK_CLIENT_SECRET
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 /loginGET /oidc/callbackGET /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
AuthGuardiancreate_auth_routerextract_client_roles(payload, client_id)AuthConfigAuthTokenValidatorAuthOIDCClientKeycloakAuthErrorTokenValidationErrorKeycloakAPIError
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file auth_guardian-0.1.9.tar.gz.
File metadata
- Download URL: auth_guardian-0.1.9.tar.gz
- Upload date:
- Size: 21.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
92d2d5a86d531ac80660105acea4b24a5454e61d6413781b600faa56a46b270e
|
|
| MD5 |
a80bf135066ab1ed0a43013a6c7ad3cc
|
|
| BLAKE2b-256 |
ef7e60a544a6e44aed94323105c64ce33f3c3867c102546482fab2be133f5106
|
File details
Details for the file auth_guardian-0.1.9-py3-none-any.whl.
File metadata
- Download URL: auth_guardian-0.1.9-py3-none-any.whl
- Upload date:
- Size: 20.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5b5121c7d3c5bd349ef13cb96cfbc28e3ebe62b6dc1b8d5be2fc3949efad926
|
|
| MD5 |
3cf21a2ffd92eef7b8040d0c655079d5
|
|
| BLAKE2b-256 |
7e323e98dfda428990fa1f94f036090686dc400cba59dafae3c331f6d414677a
|