L'API SystemBuddy

Un autre système peut lire et écrire une tranche étroite et délibérée de SystemBuddy par HTTPS : les billets, les actifs et les articles de connaissances publiés. Il s'authentifie avec une clé d'API, qui est une identité de service et jamais une personne. Les clés sont créées par un administrateur dans Administration, Clés d'API.

1 · S'authentifier

Chaque appel porte la clé dans un en-tête. Les deux formes suivantes sont acceptées :

Une clé ressemble à sbk_3f9a1c40_<aléatoire>. Les deux premiers segments forment le préfixe. Le préfixe est public : c'est lui que la liste des clés, les journaux et la piste d'audit utilisent pour nommer une clé, alors on peut le citer sans risque dans une conversation de soutien. Le reste est le secret.

La clé n'est montrée qu'une seule fois, sur l'écran qui la crée. SystemBuddy n'en conserve qu'une empreinte SHA-256, de sorte que personne, nous y compris, ne peut l'afficher de nouveau. Si elle est perdue ou divulguée, révoquez-la et créez-en une autre.

Envoyez la clé depuis un serveur, jamais depuis un navigateur ou une application mobile. Tout ce qui est livré sur l'appareil d'un utilisateur livre la clé avec lui.

2 · Portées

Une clé porte les portées nommées qu'un administrateur a cochées, et rien d'autre. Un appel à un point d'accès dont la clé n'a pas la portée est refusé avec un 403, et le refus est inscrit dans la piste d'audit.

Donnez à une clé le minimum dont elle a besoin. Une tâche de production de rapports veut généralement tickets:read et rien de plus.

3 · Ce qu'une clé ne peut jamais faire

C'est la partie qui compte, alors elle mérite d'être dite clairement. Une clé est authentifiée par son propre mécanisme, distinct de celui avec lequel les gens se connectent, et l'entité qu'elle produit ne porte aucune identité d'utilisateur : aucun identifiant d'utilisateur, aucun rôle, aucun groupe, aucune permission héritée. Aucune portée n'accorde l'un des éléments suivants, et aucun point d'accès qui les offre n'accepte une clé :

Ces points d'accès répondent 401 à une clé, exactement comme ils le font en l'absence totale d'identifiant. Une suite de tests négatifs rejoue chaque point d'accès privilégié du produit avec une clé active et de pleine portée à chaque compilation, et échoue si un seul renvoie une réussite.

4 · Limites de débit

Chaque clé a sa propre limite de requêtes par minute, définie à sa création et modifiable par la suite. Elle est appliquée par clé, et non par adresse, de sorte qu'une intégration très active ne peut pas dépenser le budget d'une autre.

Le serveur applique aussi sa propre limite par adresse devant tout le reste, et le mandataire inverse d'un client peut en ajouter une troisième. Si vous êtes ralenti et qu'aucun Retry-After n'est présent, c'est la bordure qui vous limite, et non la clé.

5 · Expiration et révocation

Une clé a une date d'expiration, proposée à 90 jours et réglable jusqu'à deux ans. Une clé expirée cesse de fonctionner d'elle-même, et c'est le but : une intégration que plus personne ne possède s'éteint discrètement au lieu de vivre éternellement.

La révocation est immédiate. Dès qu'un administrateur révoque une clé, l'appel suivant qui la présente est refusé, et le refus, avec son motif, figure dans la piste d'audit. La création, la modification et la révocation d'une clé sont elles aussi consignées, par préfixe et jamais par la clé elle-même.

La liste des clés indique, pour chaque clé, sa dernière utilisation et l'adresse d'où elle provient, ainsi que le nombre d'appels servis. C'est le moyen le plus rapide de répondre à « est-ce que quelque chose s'en sert encore ? » avant de la désactiver.

6 · La description de l'API

Chaque serveur SystemBuddy publie un document OpenAPI 3.0 correspondant exactement à la surface qu'une clé peut atteindre, à /api/v1/openapi.json sur ce serveur. Il est généré à partir du code en cours d'exécution, alors il décrit ce que cette version sert réellement, y compris la portée requise pour chaque opération. Dirigez-y votre générateur de client.

Les points d'accès sous /api/v1 aujourd'hui :

Les listes acceptent page et pageSize. pageSize est plafonné à 200, alors demandez des pages plutôt que tout d'un coup.

7 · Réponses à gérer

Des questions ?

Écrivez à orders@systembuddy.net avec le préfixe de la clé que vous utilisez, jamais la clé elle-même, et ce que vous cherchez à bâtir.