Sommaire

Connexion et accès

Les clients d'IA se connectent à LetKite avec OAuth 2.1. Vous approuvez chaque client une fois, vous choisissez ce qu'il peut faire et les machines qu'il atteint, et vous pouvez lui retirer cet accès à tout moment.

Découverte

Un client qui appelle https://mcp.letkite.com/mcp sans jeton reçoit une réponse HTTP 401 avec un en-tête WWW-Authenticate qui pointe vers les métadonnées de la ressource protégée. À partir de là, il trouve le serveur d'autorisation :

Métadonnées de la ressource protégéehttps://mcp.letkite.com/.well-known/oauth-protected-resource/mcp
Métadonnées du serveur d'autorisationhttps://mcp.letkite.com/.well-known/oauth-authorization-server (également à l'adresse /.well-known/openid-configuration)
Émetteurhttps://mcp.letkite.com
Point de terminaison d'autorisationhttps://mcp.letkite.com/oauth/authorize
Point de terminaison de jetonhttps://mcp.letkite.com/oauth/token
Point de terminaison de révocationhttps://mcp.letkite.com/oauth/revoke (jetons de rafraîchissement)
Point de terminaison d'enregistrementhttps://mcp.letkite.com/oauth/register

Enregistrement des clients

LetKite n'a aucun client préenregistré. Un client s'identifie de l'une des deux façons suivantes :

  • Enregistrement dynamique de client (RFC 7591) : le client envoie ses métadonnées au point de terminaison d'enregistrement et reçoit un identifiant client. Un secret client n'est délivré qu'aux clients qui demandent client_secret_post ou client_secret_basic ; les clients publics n'en utilisent pas.
  • Document de métadonnées d'identifiant client : l'identifiant client est une URL https:// qui fournit les métadonnées du client. LetKite la récupère avec un délai d'expiration de 5 secondes, jusqu'à 64 Ko, sans suivre les redirections, et uniquement depuis des adresses publiques.

Les URI de redirection doivent être en https, ou en http sur une adresse de bouclage (localhost, 127.0.0.1) pour les clients locaux comme Claude Code, qui peuvent utiliser n'importe quel port (RFC 8252). LetKite reconnaît les adresses de rappel de Claude, de ChatGPT et d'autres clients connus, et la page de connexion vous avertit lorsque l'adresse de rappel d'un client n'en fait pas partie. Les adresses de rappel refusées sont consignées dans le journal d'audit.

Le flux d'autorisation

  • Flux avec code d'autorisation uniquement (response_type=code), avec PKCE S256 obligatoire pour chaque requête.
  • Indicateurs de ressource (RFC 8707) : le client peut désigner https://mcp.letkite.com/mcp comme ressource ; les jetons sont toujours délivrés pour celle-ci.
  • La réponse d'autorisation contient iss (RFC 9207).
  • Types d'octroi : authorization_code et refresh_token.

La connexion se fait sur la propre page de connexion de LetKite (id.letkite.com), avec vérification en deux étapes lorsque votre compte l'exige. Si vous appartenez à plusieurs comptes LetKite, vous en choisissez un. La page de consentement affiche ensuite :

  • le nom du client, la façon dont il s'est enregistré et l'adresse vers laquelle il vous renvoie ;
  • les portées qu'il demande, que vous pouvez décocher (il en reste au moins une) ;
  • les machines qu'il peut atteindre : toutes les machines, y compris celles ajoutées plus tard, ou seulement les machines portant les étiquettes ou les identifiants que vous choisissez ;
  • la politique qui le limite, choisie parmi les politiques de votre compte.

L'approbation crée une connexion (un octroi) pour cette personne, ce client, cet ensemble de portées, cet ensemble de machines et cette politique. Les propriétaires du compte et vous-même recevez un e-mail au sujet de la nouvelle connexion, avec un lien pour la révoquer si ce n'était pas vous.

Portées (scopes)

PortéeAutoriseOutils (exemples)
fleet.readLister les machines, lire des fichiers, consulter les journaux et l'état des tâcheslist_hosts, host_facts, read_file, list_dir, job_status, log_read
fleet.execExécuter des commandes, ouvrir des shells et des terminaux, lancer des tâches et des planifications, réveiller des machinesexec, shell_run, job_start, terminal_open, schedule_create
fleet.writeÉcrire, téléverser, copier et supprimer des fichierswrite_file, delete_path, transfer_start
fleet.adminRedirection de ports et lecture du journal d'audit ; inclut les trois autrestunnel_open, tunnel_http, audit_tail
offline_accessAcceptée ; des jetons de rafraîchissement sont délivrés dans tous les cas

La portée dont chaque outil a besoin est indiquée dans sa description, sur la page Outils. Un appel sans cette portée échoue avec token lacks fleet.….

Jetons

Jeton d'accès15 minutes, un JWT signé (RS256) pour https://mcp.letkite.com/mcp, envoyé sous la forme Authorization: Bearer
Jeton de rafraîchissement30 jours, remplacé à chaque utilisation ; réutiliser un ancien jeton révoque toute la chaîne
Code d'autorisation2 minutes, à usage unique ; un code rejoué révoque les jetons délivrés à partir de celui-ci

Retirer l'accès

  • Dans la console, sous Connexions (https://dashboard.letkite.com/connections), déconnectez l'une de vos connexions. Les propriétaires et les administrateurs peuvent déconnecter celles de n'importe qui.
  • Utilisez le lien de l'e-mail de nouvelle connexion.

LetKite relit la connexion à chaque appel d'outil : un client déconnecté est donc refusé en quelques secondes, sans attendre l'expiration de son jeton. Une connexion dont tous les jetons de rafraîchissement ont expiré depuis un jour est supprimée d'elle-même, sauf si une planification l'utilise.