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ée | https://mcp.letkite.com/.well-known/oauth-protected-resource/mcp |
|---|---|
| Métadonnées du serveur d'autorisation | https://mcp.letkite.com/.well-known/oauth-authorization-server (également à l'adresse /.well-known/openid-configuration) |
| Émetteur | https://mcp.letkite.com |
| Point de terminaison d'autorisation | https://mcp.letkite.com/oauth/authorize |
| Point de terminaison de jeton | https://mcp.letkite.com/oauth/token |
| Point de terminaison de révocation | https://mcp.letkite.com/oauth/revoke (jetons de rafraîchissement) |
| Point de terminaison d'enregistrement | https://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_postouclient_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 PKCES256obligatoire pour chaque requête. - Indicateurs de ressource (RFC 8707) : le client peut désigner
https://mcp.letkite.com/mcpcomme ressource ; les jetons sont toujours délivrés pour celle-ci. - La réponse d'autorisation contient
iss(RFC 9207). - Types d'octroi :
authorization_codeetrefresh_token.
Ce que vous approuvez
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ée | Autorise | Outils (exemples) |
|---|---|---|
fleet.read | Lister les machines, lire des fichiers, consulter les journaux et l'état des tâches | list_hosts, host_facts, read_file, list_dir, job_status, log_read |
fleet.exec | Exécuter des commandes, ouvrir des shells et des terminaux, lancer des tâches et des planifications, réveiller des machines | exec, shell_run, job_start, terminal_open, schedule_create |
fleet.write | Écrire, téléverser, copier et supprimer des fichiers | write_file, delete_path, transfer_start |
fleet.admin | Redirection de ports et lecture du journal d'audit ; inclut les trois autres | tunnel_open, tunnel_http, audit_tail |
offline_access | Accepté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ès | 15 minutes, un JWT signé (RS256) pour https://mcp.letkite.com/mcp, envoyé sous la forme Authorization: Bearer |
|---|---|
| Jeton de rafraîchissement | 30 jours, remplacé à chaque utilisation ; réutiliser un ancien jeton révoque toute la chaîne |
| Code d'autorisation | 2 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.