3 minutes
Comment sécuriser les clés d'API en utilisant les composants serveur de Next.js
Aperçu
Nous pouvons utiliser les Composants du serveur Next.js pour sécuriser correctement notre clé API et éviter qu’elle ne soit exposée dans le frontend de notre dapp. Pour renforcer la sécurité de notre clé API, nous pouvons également restreindre notre clé API à certains subgraphs ou domaines dans Subgraph Studio.
Dans ce cookbook, nous allons voir comment créer un composant serveur Next.js qui interroge un subgraph tout en cachant la clé API du frontend.
Mise en garde
- Les composants serveur de Next.js ne protègent pas les clés API contre les attaques de déni de service.
- Les passerelles de The Graph Network disposent de stratégies de détection et d’atténuation des attaques de déni de service, cependant, l’utilisation des composants serveur peut affaiblir ces protections.
- Les composants serveur de Next.js introduisent des risques de centralisation car le serveur peut tomber en panne.
Pourquoi est-ce nécessaire
Dans une application React standard, les clés API incluses dans le code frontend peuvent être exposées du côté client, posant un risque de sécurité. Bien que les fichiers .env
soient couramment utilisés, ils ne protègent pas complètement les clés car le code de React est exécuté côté client, exposant ainsi la clé API dans les headers. Les composants serveur Next.js résolvent ce problème en gérant les opérations sensibles côté serveur.
Utiliser le rendu côté client pour interroger un subgraph

Prérequis
- Une clé API provenant de Subgraph Studio
- Une connaissance de base de Next.js et React.
- Un projet Next.js existant qui utilise l’App Router.
Guide étape par étape
Étape 1 : Configurer les Variables d’Environnement
- À la racine de notre projet Next.js, créer un fichier
.env.local
. - Ajouter notre clé API ::
API_KEY=<cle_api_ici>
.
Étape 2 : Créer un Composant Serveur
- Dans notre répertoire
components
, créer un nouveau fichier,ServerComponent.js
. - Utiliser le code exemple fourni pour configurer le composant serveur.
Étape 3 : Implémenter la Requête API Côté Serveur
Dans ServerComponent.js
, ajouter le code suivant :
1const API_KEY = process.env.API_KEY23export default async function ServerComponent() {4 const response = await fetch(5 `https://gateway-arbitrum.network.thegraph.com/api/${API_KEY}/subgraphs/id/HUZDsRpEVP2AvzDCyzDHtdc64dyDxx8FQjzsmqSg4H3B`,6 {7 method: 'POST',8 headers: {9 'Content-Type': 'application/json',10 },11 body: JSON.stringify({12 query: /* GraphQL */ `13 {14 factories(first: 5) {15 id16 poolCount17 txCount18 totalVolumeUSD19 }20 }21 `,22 }),23 },24 )2526 const responseData = await response.json()27 const data = responseData.data2829 return (30 <div>31 <h1>Server Component</h1>32 {data ? (33 <ul>34 {data.factories.map((factory) => (35 <li key={factory.id}>36 <p>ID: {factory.id}</p>37 <p>Pool Count: {factory.poolCount}</p>38 <p>Transaction Count: {factory.txCount}</p>39 <p>Total Volume USD: {factory.totalVolumeUSD}</p>40 </li>41 ))}42 </ul>43 ) : (44 <p>Loading data...</p>45 )}46 </div>47 )48}
Étape 4 : Utiliser le Composant Serveur
- Dans notre fichier de page (par exemple,
pages/index.js
), importerServerComponent
. - Rendu du composant:
1import ServerComponent from './components/ServerComponent'23export default function Home() {4 return (5 <main>6 <ServerComponent />7 </main>8 )9}
Étape 5 : Lancer et tester notre Dapp
Démarrez notre application Next.js en utilisant npm run dev
. Vérifiez que le composant serveur récupère les données sans exposer la clé API.

Conclusion
En utilisant les composants serveur de Next.js, nous avons effectivement caché la clé API du côté client, améliorant ainsi la sécurité de notre application. Cette méthode garantit que les opérations sensibles sont traitées côté serveur, à l’abri des vulnérabilités potentielles côté client. Enfin, n’oubliez pas d’explorer d’autres mesures de sécurité des clés d’API pour renforcer encore davantage la sécurité de vos clés d’API.