Docs/ Référence API/ Authentification API

Authentification API

Tous les points d’entrée REST vivent sous /api/v1. Les scripts, les tâches de CI et les intégrations s’authentifient avec une clé d’API ; le tableau de bord utilise une session par cookie.

Clés d’API

Une clé d’API est le seul identifiant prévu pour les programmes. Créez-en une par outil : vous pourrez révoquer une intégration sans toucher aux autres.

  1. Dans le tableau de bord, ouvrez Paramètres → Clés API et cliquez sur Créer une clé API.
  2. Donnez-lui un nom qui dit ce qui l’utilise, par exemple « Pipeline CI ».
  3. Choisissez son niveau d’accès et, si vous le souhaitez, une date d’expiration.
  4. Copiez la clé tout de suite : elle n’est affichée qu’une fois et stockée sous forme hachée. Si vous la perdez, supprimez-la et créez-en une nouvelle.

Les clés commencent par sh0_. Une clé ne peut jamais faire plus que le compte qui l’a créée, et une clé ne peut pas créer d’autres clés.

Niveaux d’accès

Chaque clé porte l’un des trois niveaux d’accès, appliqué par le serveur à chaque requête. Par l’API, le niveau est le champ scopes : read, deploy ou admin.

NiveauPeutNe peut pas
Lecture seule
read
Consulter les apps, déploiements, journaux, métriques et la configuration, y compris les variables d’environnement, les identifiants des bases de données, les sauvegardes et les fichiers des conteneurs.Ne peut rien modifier : ni déployer, ni redémarrer, ni créer, ni supprimer. Pas de terminal, pas d’accès à l’hôte.
Déploiement
deploy
Tout ce que permet la lecture seule, plus déployer, revenir en arrière, redémarrer, démarrer, arrêter et mettre à l’échelle les apps existantes, et leur envoyer une nouvelle archive : la clé exécute le code qu’elle envoie.Ne peut ni créer ni supprimer d’app, ni modifier leurs réglages, domaines ou variables d’environnement, ni gérer les nœuds, utilisateurs, clés ou paramètres du serveur. Pas de terminal.
Administration
admin
Tout ce que peut votre compte, y compris créer et supprimer des ressources, le terminal et l’accès à l’hôte.Jamais plus que votre propre rôle. Ne peut pas créer d’autres clés d’API, ni gérer les identités de connexion ou l’obligation de double authentification.
Tip
Donnez à chaque outil le niveau le plus étroit qui fonctionne : une tâche de CI qui ne fait que redéployer une app existante a besoin de Déploiement, un script de supervision de Lecture seule.
Warning
La lecture seule révèle quand même des secrets : elle lit les variables d’environnement et les identifiants des bases de données. Traitez chaque clé comme un mot de passe et ne la committez jamais dans un dépôt.

Utiliser une clé

Envoyez la clé dans l’en-tête Authorization: Bearer de chaque requête :

Terminal
export SH0_TOKEN="sh0_..."
curl https://panel.example.com/api/v1/apps \
  -H "Authorization: Bearer $SH0_TOKEN"
Warning
L’en-tête X-API-Key n’est pas lu. Une requête qui ne porte que lui est traitée comme anonyme et reçoit un 401 « No authentication token provided ».

Sessions du tableau de bord

Le tableau de bord se connecte avec POST /api/v1/auth/login. En cas de succès, le serveur pose des cookies HttpOnly (sh0_access et sh0_refresh) et renvoie un csrf_token dans le corps de la réponse ; aucun jeton n’est renvoyé dans le corps. Ce parcours est fait pour les navigateurs : pour un script, utilisez une clé d’API.

La session d'accès dure 24 heures. Le tableau de bord la renouvelle par POST /api/v1/auth/refresh, qui émet aussi une nouvelle session de renouvellement de 30 jours ; une session inutilisée pendant 30 jours prend fin.

Changer de mot de passe déconnecte toutes les autres sessions. Les tentatives de connexion sont limitées à 5 échecs par 15 minutes ; un mot de passe correct ne compte pas dans la limite.

Connexion à deux facteurs

Quand le compte a la double authentification, la connexion répond requires_totp avec un totp_nonce de courte durée au lieu d’ouvrir la session. Le client envoie ensuite ce nonce et le code à 6 chiffres (ou un code de secours) à POST /api/v1/auth/totp/verify. La vérification est limitée à 5 essais par 5 minutes.

Protection CSRF

Les requêtes authentifiées par le cookie de session doivent répéter le jeton CSRF dans l’en-tête X-CSRF-Token à chaque appel qui modifie un état. Les requêtes authentifiées par une clé d’API dans l’en-tête Authorization n’en ont pas besoin.

Erreurs d’authentification

Les erreurs utilisent l’enveloppe d’erreur standard. Par exemple, une clé inconnue ou révoquée :

401 Unauthorized
{"error":{"code":"UNAUTHORIZED","message":"Invalid API key"}}
HTTPCodeSignification
401UNAUTHORIZEDAucun identifiant, clé inconnue, expirée ou révoquée, session expirée, ou e-mail ou mot de passe faux à la connexion
403FORBIDDENAuthentifié, mais le niveau d’accès de la clé ou le rôle du compte n’autorise pas cette action
429RATE_LIMITEDTrop de tentatives : 5 connexions échouées par 15 minutes, ou 5 vérifications à deux facteurs par 5 minutes