Sécurité & Authentification
Démarrage rapide
Sécurité & Authentification
PgArachne s’appuie entièrement sur le système de permission de PostgreSQL. Il ne réinvente pas les listes
de contrôle d’accès (ACL).
PgArachne prend en charge quatre méthodes d’authentification. Les méthodes 1 à 3 utilisent
SET LOCAL ROLE pour changer d’identité ; la méthode 4 (identifiants directs) se connecte
directement en tant que l’utilisateur, sans changement de rôle nécessaire.
1. Connexion interactive (JWT)
Les utilisateurs s’authentifient en utilisant leur vrai nom d’utilisateur et mot de passe
PostgreSQL via la méthode JSON-RPC get_jwt. En cas de succès, ils reçoivent un JWT
de courte durée. Les requêtes suivantes portent ce jeton dans l’en-tête
Authorization: Bearer <token>, et PgArachne bascule le rôle actif vers cet utilisateur
pour la durée de chaque requête.
2. Comptes de service (Tokens API)
Pour les systèmes automatisés ou les scripts, vous pouvez utiliser des tokens API longue durée.
- Les jetons sont stockés dans la table
pgarachne.api_tokens. - Chaque jeton est mappé à un utilisateur/rôle de base de données spécifique.
- Envoyez le jeton via l’en-tête
Authorization: Bearer <token>.
La création de tokens API nécessite pgarachne_admin. Utilisez pgarachne.add_api_token(...) avec un rôle membre de pgarachne_admin.
3. Fournisseur d’identité externe (JWT personnalisé)
Si vous authentifiez les utilisateurs en dehors de PgArachne (par exemple via un service d’authentification externe), vous pouvez émettre les JWT dans ce service et les envoyer directement à PgArachne.
- Format de l’en-tête :
Authorization: Bearer <jwt>. - Signature : HMAC uniquement (
HS256/HS384/HS512) avec le mêmeJWT_SECRETque celui configuré dans PgArachne. - Claims requis :
db_role(chaîne non vide) etdb_name(chaîne qui doit correspondre au segment de chemin:database). - Claim recommandé :
exp(timestamp Unix) pour l’expiration du token.
Exemple minimal de payload :
{
"db_role": "demo_user",
"db_name": "my_database",
"exp": 1767225600
}Note : les algorithmes JWT asymétriques (par exemple RS256/ES256)
ne sont pas pris en charge.
4. Identifiants directs de base de données (Basic Auth)
L’option la plus simple : envoyez le nom d’utilisateur et le mot de passe PostgreSQL avec chaque
requête via l’authentification HTTP Basic standard. PgArachne ouvre un pool de connexions
dédié authentifié directement en tant que cet utilisateur — SET LOCAL ROLE n’est
pas effectué.
Authorization: Basic <base64(username:password)>Exemple avec curl :
curl -X POST http://localhost:8080/db/my_database/jsonrpc \
-u demo_user:user_password \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","method":"api.hello_world","params":{},"id":1}'- Prototypage rapide et développement local — aucune gestion de jetons requise.
- Services internes qui gèrent déjà les identifiants de manière sécurisée.
- Scénarios où émettre un JWT au préalable ajoute une complexité inutile.
Différences clés par rapport aux méthodes basées sur les jetons :
- Aucun
GRANT demo_user TO pgarachnen’est requis — PgArachne ne change pas de rôle. - La sécurité au niveau des lignes (Row-Level Security) et les permissions
GRANTde PostgreSQL sont appliquées comme d’habitude car la connexion s’exécute sous l’identité de l’utilisateur réel. - Les pools de connexions sont conservés par utilisateur pour l’efficacité, avec une durée de vie maximale de 5 minutes. Après un changement de mot de passe, les anciennes connexions expirent dans cette fenêtre.
- Pour que les clés d’idempotence fonctionnent avec les identifiants directs, accordez à
l’utilisateur
EXECUTE ON FUNCTION pgarachne.save_idempotency_key(text).
Privilèges Proxy : requis uniquement pour les méthodes 1 à 3
Pour l’authentification par JWT et par jeton API, PgArachne se connecte en tant qu’utilisateur
système défini dans DB_USER (ex : pgarachne) et change d’identité via
SET LOCAL ROLE. L’utilisateur système doit être membre de chaque
rôle cible.
-- Required for JWT / API-token auth only:
GRANT demo_user TO pgarachne;Ce grant n’est pas nécessaire lors de l’utilisation des identifiants directs (méthode 4).
Tableau comparatif des méthodes d’authentification
| Méthode | En-tête | SET LOCAL ROLE | GRANT … TO pgarachne | Idéal pour |
|---|---|---|---|---|
| JWT (get_jwt) | Bearer <jwt> | ✅ Oui | Requis | Sessions utilisateur |
| Jeton API | Bearer <token> | ✅ Oui | Requis | Services automatisés |
| JWT externe | Bearer <jwt> | ✅ Oui | Requis | Intégration IdP externe |
| Identifiants directs | Basic <b64> | ❌ Non | Non requis | Développement, services internes |