Inicio rápido
Seguridad y Autenticación
PgArachne se basa completamente en el sistema de permisos de PostgreSQL. No reinventa las Listas
de Control de Acceso (ACLs). Todas las consultas se ejecutan bajo el rol de base de datos específico del
usuario autenticado usando SET LOCAL ROLE.
1. Inicio de Sesión Interactivo (JWT)
Los usuarios se autentican usando su nombre de usuario y contraseña reales de PostgreSQL a través de la función de inicio de sesión. Si tiene éxito, reciben un JWT genérico. Cuando se usa este token, PgArachne cambia el rol activo a ese usuario durante la duración de la petición.
2. Cuentas de Servicio (Tokens de API)
Para sistemas automatizados o scripts, puedes usar tokens de API de larga duración.
- Los tokens se almacenan en la tabla
pgarachne.api_tokens. - Cada token se asigna a un usuario/rol de base de datos específico.
- Envía el token a través del encabezado
Authorization: Bearer <token>.
Crear tokens API requiere pgarachne_admin. Usa pgarachne.add_api_token(...) con un rol que sea miembro de pgarachne_admin.
3. Proveedor de identidad externo (JWT propio)
Si autenticas usuarios fuera de PgArachne (por ejemplo con un servicio de autenticación externo), puedes emitir JWT allí y enviarlos directamente a PgArachne.
- Formato del header:
Authorization: Bearer <jwt>. - Firma: solo HMAC (
HS256/HS384/HS512) con el mismoJWT_SECRETconfigurado en PgArachne. - Claims obligatorios:
db_role(string, no vacío) ydb_name(string, debe coincidir con/api/:database). - Claim recomendado:
exp(timestamp Unix) para expiración del token.
Ejemplo mínimo de payload:
{
"db_role": "demo_user",
"db_name": "my_database",
"exp": 1767225600
}Importante: los algoritmos JWT asimétricos (por ejemplo RS256/ES256)
no son aceptados por la implementación actual del servidor.
Configuración Crítica: Privilegios del Proxy
Dado que PgArachne se conecta como el usuario definido en DB_USER (ej.
pgarachne) y cambia la identidad a otros usuarios, el usuario proxy debe ser
miembro de esos roles objetivo.
Ejecuta este SQL para cada usuario/rol que necesite iniciar sesión:
-- Permitir a 'pgarachne' cambiar a 'demo_user'
GRANT demo_user TO pgarachne;