Flux d'authentification
Cette page décrit comment les applications clientes s'authentifient auprès de l'API REST du control-plane de VaultPAM.
Vue d'ensemble
VaultPAM prend en charge deux types d'identifiants :
| Type d'identifiant | Cas d'usage | Durée de vie |
|---|---|---|
| Jeton de session | Automatisation interactive ou de courte durée | Contrôlée par le champ expires_in dans la réponse |
| Jeton d'accès personnel (PAT) | Intégrations de longue durée, pipelines CI/CD | Jusqu'à PAT_ABSOLUTE_MAX_TTL_DAYS (180 jours) |
Les deux types sont des jetons Bearer transportés dans l'en-tête Authorization à chaque requête.
Obtention d'un jeton de session
Étape 1 — POST /api/v1/auth/login
POST /api/v1/auth/login
Content-Type: application/json
{
"email": "operator@example.com",
"password": "<password>"
}
Réponse réussie (200) :
{
"access_token": "eyJ...",
"expires_in": 3600
}
Le champ expires_in correspond à la durée de vie faisant autorité du jeton, exprimée en secondes. Considérez cette valeur comme la source de vérité pour votre logique d'expiration de jeton — ne vous appuyez sur aucune constante codée en dur.
Réponse d'erreur : tous les échecs d'authentification renvoient une erreur uniforme AUTH_FAILED, quelle que soit la raison réelle de l'échec (mot de passe incorrect, adresse e-mail inconnue, compte verrouillé). Ce comportement est intentionnel — VaultPAM ne révèle pas quelle partie de l'identifiant était invalide.
{
"error": "AUTH_FAILED",
"message": "Authentication failed."
}
Étape 2 — Identifier l'organisation active
GET /api/v1/org/memberships
Authorization: Bearer <access_token>
Réponse :
{
"active_org_id": "org_01HXZ...",
"memberships": [
{ "org_id": "org_01HXZ...", "role": "operator" }
]
}
Utilisez active_org_id comme valeur de l'en-tête X-Active-Org-Id pour les requêtes ultérieures.
Effectuer des requêtes authentifiées
Incluez les deux en-têtes à chaque appel d'API :
Authorization: Bearer <access_token>
X-Active-Org-Id: <active_org_id>
Exemple :
GET /api/v1/safes
Authorization: Bearer eyJ...
X-Active-Org-Id: org_01HXZ...
Expiration du jeton de session
Les jetons de session ne sont pas renouvelables. Il n'existe aucun point de terminaison de rafraîchissement — une requête vers /api/v1/auth/refresh renvoie 404. Lorsque votre jeton expire, ré-authentifiez-vous en appelant à nouveau POST /api/v1/auth/login.
Votre client doit :
- Stocker la valeur
expires_inissue de la réponse de connexion. - Se ré-authentifier avant l'expiration du jeton (recommandé : soustraire 60 secondes comme marge de sécurité).
- Réessayer la requête initiale avec le nouveau jeton.
VaultPAM ne prend pas en charge les jetons de rafraîchissement de type OAuth. Une nouvelle connexion est requise à l'expiration.
Déconnexion
Invalidez immédiatement un jeton de session :
POST /api/v1/auth/logout
Authorization: Bearer <access_token>
X-Active-Org-Id: <active_org_id>
Réponse : 204 No Content
Jetons d'accès personnels (PAT)
Les PAT sont des jetons de longue durée destinés à l'automatisation et aux intégrations. Ils portent le préfixe pat_AIC_.
Créer un PAT
POST /api/v1/auth/api-tokens
Authorization: Bearer <access_token>
X-Active-Org-Id: <active_org_id>
Content-Type: application/json
{
"name": "ci-pipeline-token",
"scopes": ["safes.read"],
"expires_in_days": 90
}
La valeur du jeton est renvoyée une seule fois au moment de la création et ne peut pas être récupérée ultérieurement.
Révoquer un PAT
DELETE /api/v1/auth/api-tokens/{token_id}
Authorization: Bearer <access_token>
X-Active-Org-Id: <active_org_id>
Réponse : 204 No Content
L'application des portées est déployée progressivement par famille de points de terminaison. Les appels effectués avec un PAT à portée restreinte vers un point de terminaison situé en dehors des portées déclarées du jeton peuvent renvoyer 403. Utilisez le minimum de portées nécessaires à votre cas d'usage.
Stockage des jetons
Les jetons donnent un accès complet à l'API dans la limite des portées accordées. Des jetons mal gérés peuvent entraîner un accès non autorisé.
Pratiques requises :
- Ne validez jamais de jetons dans le gestionnaire de code source. Même dans des dépôts privés, des jetons présents dans du code validé constituent un risque de sécurité persistant. Utilisez des variables d'environnement ou un gestionnaire de secrets.
- Utilisez un trousseau du système d'exploitation ou un gestionnaire de secrets en production. Exemples : AWS Secrets Manager, HashiCorp Vault, macOS Keychain, trousseau du noyau Linux.
- Ne journalisez jamais les valeurs de jeton. Vérifiez la configuration de votre journalisation pour vous assurer que les jetons présents dans les en-têtes ou les corps de requête sont masqués.
- Révoquez les jetons lorsqu'ils ne sont plus nécessaires. Utilisez
DELETE /api/v1/auth/api-tokens/{token_id}pour les PAT. Les jetons de session expirent automatiquement, mais doivent être considérés comme révocables. - Configurez des outils d'analyse de secrets pour détecter le préfixe
pat_AIC_. Ce préfixe est présent sur tous les PAT de VaultPAM et permet à des outils tels que GitHub Advanced Security de signaler une exposition accidentelle.
Étapes suivantes
- Démarrage rapide curl — exemple complet de bout en bout en ligne de commande
- Démarrage rapide Python — exemple d'intégration Python
- Démarrage rapide TypeScript — exemple d'intégration TypeScript/Node.js
- Limites de débit — comprendre les en-têtes
x-ratelimit-*et le comportement de réessai