3 minutes
Jak zabezpečit klíče API pomocí komponent serveru Next.js
Přehled
We can use Next.js server components to properly secure our API key from exposure in the frontend of our dapp. To further increase our API key security, we can also restrict our API key to certain Subgraphs or domains in Subgraph Studio.
In this cookbook, we will go over how to create a Next.js server component that queries a Subgraph while also hiding the API key from the frontend.
Upozornění
- Součásti serveru Next.js nechrání klíče API před odčerpáním pomocí útoků typu odepření služby.
- Brány Graf síť mají zavedené strategie detekce a zmírňování odepření služby, avšak použití serverových komponent může tyto ochrany oslabit.
- Server komponenty Next.js přinášejí rizika centralizace, protože může dojít k výpadku serveru.
Proč je to důležité
Ve standardní aplikaci React mohou být klíče API obsažené v kódu frontendu vystaveny na straně klienta, což představuje bezpečnostní riziko. Soubory .env
se sice běžně používají, ale plně klíče nechrání, protože kód Reactu se spouští na straně klienta a vystavuje klíč API v hlavičkách. Serverové komponenty Next.js tento problém řeší tím, že citlivé operace zpracovávají na straně serveru.
Using client-side rendering to query a Subgraph

Prerequisites
- Klíč API od Subgraph Studio
- Základní znalosti Next.js a React.
- Existující projekt Next.js, který používá App Router.
Kuchařka krok za krokem
Krok 1: Nastavení proměnných prostředí
- V kořeni našeho projektu Next.js vytvořte soubor
.env.local
. - Přidejte náš klíč API:
API_KEY=<api_key_here>
.
Krok 2: Vytvoření součásti serveru
- V adresáři
components
vytvořte nový souborServerComponent.js
. - K nastavení komponenty serveru použijte přiložený ukázkový kód.
Krok 3: Implementace požadavku API na straně serveru
Do souboru ServerComponent.js
přidejte následující kód:
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}
Krok 4: Použití komponenty serveru
- V našem souboru stránky (např.
pages/index.js
) importujteServerComponent
. - Vykreslení komponenty:
1import ServerComponent from './components/ServerComponent'23export default function Home() {4 return (5 <main>6 <ServerComponent />7 </main>8 )9}
Krok 5: Spusťte a otestujte náš Dapp
Spusťte naši aplikaci Next.js pomocí npm run dev
. Ověřte, že serverová komponenta načítá data bez vystavení klíče API.

Závěr
By utilizing Next.js Server Components, we’ve effectively hidden the API key from the client-side, enhancing the security of our application. This method ensures that sensitive operations are handled server-side, away from potential client-side vulnerabilities. Finally, be sure to explore other API key security measures to increase your API key security even further.