BoutiqueServices Coin TechÀ propos
← Tous les articles du Coin Tech Coin Tech · 01

Comment j'ai arrêté d'embarquer ma clé d'API Anthropic dans des milliers de téléphones

7 min de lecture · Sécurité & API · par Imane

Quand j'ai ajouté une fonctionnalité IA à mon app, je l'ai fait comme tous les tutos le montrent : appeler l'API Anthropic directement depuis le client React Native. Ça marchait à merveille dans le simulateur. Ça voulait aussi dire que ma clé d'API se trouvait à l'intérieur du bundle de l'app, prête à être récupérée par quiconque dispose de dix minutes et d'un outil de proxy.

Les apps mobiles ne sont pas un endroit sûr pour les secrets. Tout ce qui est embarqué sur l'appareil — variables d'environnement, constantes « obfusquées », valeurs récupérées à l'exécution — peut être lu par un inconnu motivé. Avec une clé de LLM, ce n'est pas juste embarrassant : c'est votre facture, et potentiellement les abus de quelqu'un d'autre sur votre compte.

La solution : un proxy léger que vous contrôlez

Le pattern est ennuyeux, et c'est tout l'intérêt. Au lieu que l'app parle directement à Anthropic, elle parle à une petite fonction serverless que vous contrôlez. La clé vit sur le serveur. L'app s'authentifie auprès de votre proxy, le proxy ajoute la vraie clé, transmet la requête et renvoie la réponse en streaming.

App  →  votre proxy Vercel  →  Anthropic
        (détient la clé)      (renvoie le flux)

Trois pièces le rendent concret : un endpoint proxy qui transmet les requêtes et streame les réponses, un émetteur de session qui donne à chaque installation un jeton à courte durée de vie, et un petit helper côté client pour que l'app reste une ligne comme useAnthropicChat().

Ce que tout le monde rate : le streaming

Il est facile d'écrire un proxy qui renvoie toute la réponse d'un bloc. Il est bien plus agréable — et bien plus difficile — de streamer les tokens au fur et à mesure, pour que votre UI de chat semble vivante plutôt que figée. Cela implique de parser les server-sent events au passage, y compris le cas vraiment pénible où un chunk SSE est coupé en deux paquets réseau et où votre parser naïf perd la moitié d'un mot.

Ajoutez une limitation de débit pour qu'un acteur malveillant ne fasse pas exploser votre facture, et une auth par installation pour savoir quel appareil appelle, et vous avez quelque chose de réellement prêt pour la production, pas juste pour la démo.

Pourquoi j'en ai fait un boilerplate

Ça m'a pris une bonne semaine pour le faire correctement la première fois — à déboguer le découpage du streaming à minuit, avec un nouveau-né endormi dans la pièce d'à côté. Et c'est exactement le genre de tuyauterie quasi identique d'une app à l'autre, que personne ne devrait avoir à reconstruire de zéro.

Alors je l'ai extraite, j'ai retiré tout ce qui était spécifique à l'app, j'ai écrit une suite de tests et un guide de déploiement, et je l'ai mise en vente pour le prix d'un plat à emporter. Si vous êtes sur le point de brancher un LLM dans une app React Native, c'est la couche ennuyeuse mais essentielle, déjà faite.

Ce boilerplate, c'est l'Expo Anthropic Proxy Starter — proxy sécurisé, vrai streaming, rate limiting et client typé, en ligne en 10 minutes. Récupérez-le sur Lemon Squeezy →