Was ist ein API-Schlüssel? Definition, Einsatz und Sicherheit
Ein API-Schlüssel ist ein geheimer String, der die aufrufende Anwendung identifiziert. Übertragung, Speicherung, Rotation, Unterschied zu Tokens und Tests.
Was ist ein API-Schlüssel?
Ein API-Schlüssel (API Key) ist ein geheimer String, der die Anwendung oder den Nutzer identifiziert, die eine API aufrufen. Der Server schlägt ihn bei jeder Anfrage nach, um zu entscheiden, wer anfragt, welche Limits gelten und was abgerechnet wird. Er ist die einfachste Form der API-Authentifizierung, aber ein einzelnes gemeinsames Geheimnis: Wer den Schlüssel besitzt, kann als sein Inhaber auftreten.
So funktioniert ein API-Schlüssel
Der Anbieter erzeugt einen langen Zufallsschlüssel und zeigt ihn einmal an. Der Client bewahrt ihn auf und sendet ihn mit jeder Anfrage mit, meist in einem Header. Der Server vergleicht ihn mit dem Gespeicherten und lässt den Aufruf zu, begrenzt ihn oder lehnt ihn ab.
GET /v1/orders HTTP/1.1
Host: api.example.com
X-API-Key: sk_live_EXAMPLE_NOT_A_REAL_KEY| Wo der Schlüssel steht | Beispiel | Bewertung |
|---|---|---|
| Eigener Header | X-API-Key: ... | Üblich und empfohlen |
| Authorization-Header | Authorization: Bearer ... | Ebenfalls üblich, siehe Bearer Token |
| Query-String | ?api_key=... | Vermeiden: URLs landen in Logs |
| Request-Body | JSON-Feld | Bei REST-APIs selten |
Die REST-Security-Hinweise von OWASP besagen, dass API-Schlüssel und Tokens nicht in der URL stehen sollten, weil sie in Webserver-Logs landen können.
Schlüssel erzeugen und speichern
Behandeln Sie einen Schlüssel wie ein Passwort. Erzeugen Sie ihn aus einer kryptografisch sicheren Zufallsquelle, zeigen Sie ihn dem Nutzer nur einmal und speichern Sie auf dem Server nur einen Hash. Ein schneller Hash wie SHA-256 reicht für einen langen Zufallsschlüssel aus, und selbst bei einem Datenbankleck kann ein Angreifer die Schlüssel nicht verwenden.
import crypto from 'crypto';
const key = 'sk_live_' + crypto.randomBytes(24).toString('hex');
const hash = crypto.createHash('sha256').update(key).digest('hex');
// show `key` to the user once, store only `hash` in the database
await db.apiKeys.insert({ userId, keyHash: hash });API-Schlüssel im Vergleich zu OAuth und JWT
| Methode | Was sie belegt | Wann sie passt |
|---|---|---|
| API-Schlüssel | Welche Anwendung aufruft | Server-zu-Server-Aufrufe, Nutzungserfassung, einfache öffentliche APIs |
| OAuth-2.0-Access-Token | Welcher Nutzer welcher App was erlaubt hat | Apps mit Nutzern und Zugriff durch Dritte |
| JWT | Signierte Claims | Zustandslose Prüfungen zwischen Diensten |
| Mutual TLS | Ein Client-Zertifikat | Service-zu-Service-Verkehr |
Ein API-Schlüssel identifiziert eine Anwendung, keine Person, und läuft selten von selbst ab. Deshalb warnt OWASP davor, sich bei sensiblen oder wertvollen Ressourcen ausschließlich auf API-Schlüssel zu verlassen.
Best Practices für die Sicherheit von API-Schlüsseln
- Schlüssel geheim halten. Nie in Git einchecken, in Tickets einfügen oder als Screenshot teilen. Laden Sie sie aus Umgebungsvariablen oder einem Secrets-Manager.
- Getrennte Schlüssel pro Umgebung und Integration verwenden, damit ein Leck wenig Schaden anrichtet.
- Jedem Schlüssel nur die nötigen Rechte geben, zum Beispiel nur Lesezugriff.
- Den Einsatzort einschränken, etwa mit einer IP-Allowlist oder erlaubten Origins, sofern der Anbieter das unterstützt.
- Regelmäßig und bei Verdacht rotieren. Neuen Schlüssel ausstellen, kurz beide akzeptieren, Clients umstellen, dann den alten widerrufen.
- Nutzung pro Schlüssel begrenzen und protokollieren, damit Missbrauch und Lecks als Auffälligkeit sichtbar werden. Siehe API-Missbrauch.
- Immer HTTPS verwenden, damit der Schlüssel auf dem Transportweg geschützt ist.
Häufige Fehler mit API-Schlüsseln
- Einen Server-Schlüssel in Frontend-JavaScript oder eine Mobile-App einbetten, wo jeder ihn auslesen kann.
- Einen Schlüssel in der Git-Historie lassen. Die Datei zu löschen entfernt ihn nicht: Rotieren Sie den Schlüssel.
- Schlüssel in URLs senden, die Proxys, Browser und Analyse-Tools protokollieren.
- Einen allmächtigen Schlüssel für alle Dienste und Umgebungen verwenden.
- Rohe Schlüssel statt Hashes in der Datenbank speichern.
- Schlüssel per Chat oder E-Mail statt über einen Secrets-Tresor teilen.
APIs mit Schlüsseln testen und überwachen
Schlüssel prägen, wie Sie eine API testen. Verwenden Sie einen eigenen Testschlüssel, am besten gegen eine Staging-Umgebung, damit ein Lasttest weder ein Produktionskontingent aufbraucht noch das Limit eines echten Kunden auslöst. Begrenzt der Anbieter Anfragen pro Schlüssel, stößt ein einzelner Schlüssel lange vor Ihren Servern an diese Grenze, prüfen Sie das Limit also zuerst. Der Beitrag über häufige Ursachen für API-Rate-Limiting behandelt das, und wie Sie REST-APIs mit LoadFocus testen führt durch einen ersten Lauf (beide auf Englisch).
Den Schlüssel-Header fügen Sie bei einer einzelnen Anfrage mit dem kostenlosen curl-Online-Tool hinzu, bei geplanten Prüfungen mit dem API-Monitoring von LoadFocus, das eigene Header unterstützt und im kostenlosen Tarif alle 5 Minuten prüft. Zu den Endpunkten, die ein Schlüssel freischaltet, siehe API-Endpunkt, für das Gesamtbild API-Sicherheit.
Häufige Fragen zu API-Schlüsseln
Sind API-Schlüssel sicher?
Sie sind schwächer als OAuth 2.0 oder Mutual TLS, weil ein einziges Geheimnis der ganze Beweis ist. Für risikoarme Server-zu-Server-Nutzung sind sie vertretbar, zusammen mit HTTPS, engen Berechtigungen, Rate Limits und Rotation.
Was ist der Unterschied zwischen einem API-Schlüssel und einem Bearer Token?
Ein API-Schlüssel identifiziert eine Anwendung und gilt meist, bis Sie ihn rotieren. Ein Bearer Token ist ein Zugangsnachweis, oft kurzlebig und an Nutzer und Scope gebunden, ausgestellt über einen Ablauf wie OAuth 2.0. Viele APIs akzeptieren beides im selben Header.
Wie rotiere ich einen API-Schlüssel?
Erstellen Sie einen neuen Schlüssel, lassen Sie die API für eine Übergangszeit beide akzeptieren, stellen Sie alle Clients um und widerrufen Sie dann den alten.
Wo speichere ich API-Schlüssel?
In einem Secrets-Manager oder in Umgebungsvariablen auf dem Server, nie im Quellcode oder in einer Client-App. Auf Anbieterseite speichern Sie nur einen Hash.
Kann ich einen API-Schlüssel in einer Mobile-App verwenden?
Er lässt sich aus dem App-Binary auslesen, betrachten Sie ihn also als öffentlich. Schränken Sie ihn so eng ein, wie der Anbieter es erlaubt, oder leiten Sie Aufrufe über Ihr eigenes Backend und halten Sie den echten Schlüssel dort.
Wie finde ich einen geleakten API-Schlüssel?
Lassen Sie einen Secret-Scanner wie GitHub Secret Scanning oder gitleaks über Repositories und Historie laufen und beobachten Sie die Nutzung pro Schlüssel auf ungewöhnliche Mengen oder Standorte. Rotieren Sie jeden geleakten Schlüssel.
Verwandte Begriffe
- Was ist ein API-Sicherheitsaudit?
- Was ist API-Missbrauch?
- Was ist API-Zugriff? Keys, OAuth und Tokens
- Was ist API-Caching? Header, Schichten und Invalidierung
- API Deprecation: Definition, Best Practices, Beispiele
- Was ist API Discovery? Definition und Methoden
- API-First-Ansatz: Definition, Ablauf und Fallstricke
- Was ist ein API-Marketplace?
Verwandte LoadFocus-Tools
Setze dieses Konzept mit LoadFocus in die Praxis um, derselben Plattform, die alles antreibt, was du gerade gelesen hast.