Heim >Web-Frontend >js-Tutorial >API-Schlüssel und Umgebungsvariablen in Astro: Vollständiger Sicherheitsleitfaden
Wenn wir Webanwendungen mit Astro entwickeln, müssen wir häufig mit externen APIs und Diensten interagieren. Die sichere Verwaltung von Anmeldeinformationen und API-Schlüsseln ist für den Schutz unserer Anwendungen von entscheidender Bedeutung. In diesem Leitfaden werden wir Best Practices für die Verwaltung von API-Schlüsseln und Umgebungsvariablen in Astro-Projekten untersuchen.
In Astro werden Umgebungsvariablen ähnlich wie in anderen modernen Frameworks gehandhabt. Zuerst erstellen wir eine .env-Datei im Stammverzeichnis unseres Projekts:
# .env PUBLIC_API_URL=https://api.ejemplo.com PRIVATE_API_KEY=tu_clave_secreta DATABASE_URL=postgresql://usuario:password@localhost:5432/db
Für TypeScript empfiehlt es sich, eine env.d.ts-Datei zu erstellen, um unsere Variablen einzugeben:
/// <reference types="astro/client" /> interface ImportMetaEnv { readonly DATABASE_URL: string; readonly PRIVATE_API_KEY: string; readonly PUBLIC_API_URL: string; } interface ImportMeta { readonly env: ImportMetaEnv; }
In Astro können wir je nach Kontext auf unterschiedliche Weise auf Umgebungsvariablen zugreifen:
--- // En archivos .astro const apiKey = import.meta.env.PRIVATE_API_KEY; const publicUrl = import.meta.env.PUBLIC_API_URL; ---
// En archivos .ts o .js const apiKey = import.meta.env.PRIVATE_API_KEY;
Astro folgt einer wichtigen Konvention für Umgebungsvariablen:
# .env PUBLIC_API_URL=https://api.publica.com # ✅ Visible en el cliente PRIVATE_API_KEY=secreto123 # ⛔ Solo servidor
Um APIs zu verarbeiten, die eine Authentifizierung erfordern, müssen wir serverlose Endpunkte erstellen:
// src/pages/api/data.ts export async function GET() { try { const response = await fetch('https://api.externa.com/data', { headers: { 'Authorization': `Bearer ${import.meta.env.PRIVATE_API_KEY}` } }); const data = await response.json(); return new Response(JSON.stringify(data), { status: 200, headers: { 'Content-Type': 'application/json' } }); } catch (error) { return new Response(JSON.stringify({ error: 'Error al obtener datos' }), { status: 500 }); } }
Implementieren Sie eine Validierungsfunktion zu Beginn Ihrer Bewerbung:
// src/utils/validateEnv.ts export function validateEnv() { const requiredEnvVars = [ 'DATABASE_URL', 'PRIVATE_API_KEY', 'PUBLIC_API_URL' ]; for (const envVar of requiredEnvVars) { if (!import.meta.env[envVar]) { throw new Error(`La variable de entorno ${envVar} es requerida`); } } } // src/pages/index.astro --- import { validateEnv } from '../utils/validateEnv'; if (import.meta.env.MODE === 'development') { validateEnv(); } ---
Erstellen Sie für jede Umgebung unterschiedliche Dateien:
.env # Variables por defecto .env.development # Variables de desarrollo .env.production # Variables de producción .env.local # Variables locales (ignoradas en git)
Stellt eine .env.example-Datei bereit:
# .env.example PUBLIC_API_URL=https://api.ejemplo.com PRIVATE_API_KEY=tu_clave_aqui DATABASE_URL=postgresql://usuario:password@localhost:5432/db
Stellen Sie sicher, dass vertrauliche Dateien in .gitignore enthalten sind:
# .env PUBLIC_API_URL=https://api.ejemplo.com PRIVATE_API_KEY=tu_clave_secreta DATABASE_URL=postgresql://usuario:password@localhost:5432/db
/// <reference types="astro/client" /> interface ImportMetaEnv { readonly DATABASE_URL: string; readonly PRIVATE_API_KEY: string; readonly PUBLIC_API_URL: string; } interface ImportMeta { readonly env: ImportMetaEnv; }
--- // En archivos .astro const apiKey = import.meta.env.PRIVATE_API_KEY; const publicUrl = import.meta.env.PUBLIC_API_URL; ---
// En archivos .ts o .js const apiKey = import.meta.env.PRIVATE_API_KEY;
# .env PUBLIC_API_URL=https://api.publica.com # ✅ Visible en el cliente PRIVATE_API_KEY=secreto123 # ⛔ Solo servidor
// src/pages/api/data.ts export async function GET() { try { const response = await fetch('https://api.externa.com/data', { headers: { 'Authorization': `Bearer ${import.meta.env.PRIVATE_API_KEY}` } }); const data = await response.json(); return new Response(JSON.stringify(data), { status: 200, headers: { 'Content-Type': 'application/json' } }); } catch (error) { return new Response(JSON.stringify({ error: 'Error al obtener datos' }), { status: 500 }); } }
// src/utils/validateEnv.ts export function validateEnv() { const requiredEnvVars = [ 'DATABASE_URL', 'PRIVATE_API_KEY', 'PUBLIC_API_URL' ]; for (const envVar of requiredEnvVars) { if (!import.meta.env[envVar]) { throw new Error(`La variable de entorno ${envVar} es requerida`); } } } // src/pages/index.astro --- import { validateEnv } from '../utils/validateEnv'; if (import.meta.env.MODE === 'development') { validateEnv(); } ---
Der sichere Umgang mit API-Schlüsseln und Umgebungsvariablen ist für jede moderne Webanwendung von entscheidender Bedeutung. Indem wir diese Best Practices bei Astro befolgen, können wir:
Das obige ist der detaillierte Inhalt vonAPI-Schlüssel und Umgebungsvariablen in Astro: Vollständiger Sicherheitsleitfaden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!