Was ist ein API-Schlüssel?
API-Schlüssel werden verwendet, um die aufrufende Anwendung oder den Dienst zu identifizieren und zu autorisieren. Sie sind in der Regel langlebig und statisch, bis sie rotiert werden, und haben oft einen festen Satz von Berechtigungen. Sie werden hauptsächlich für Server-zu-Server-Kommunikationen oder den Zugriff auf öffentliche Daten verwendet, diese Tokens repräsentieren im Allgemeinen keinen bestimmten Benutzer.
Wie funktioniert ein API-Schlüssel?
Ein API-Schlüssel ist eine lange Zeichenfolge, die vom API-Anbieter generiert und mit autorisierten Benutzern geteilt wird. Dieser Schlüssel muss im Anforderungsheader enthalten sein, wenn auf die API zugegriffen wird. API-Schlüssel sind einfach und effektiv für grundlegende Sicherheitsanforderungen. Zum Beispiel bieten beliebte Dienste wie Google Maps API und AWS API-Schlüssel an, um den Zugriff zu kontrollieren und die Nutzung zu überwachen.
curl -GET https://api.example.com/endpoint -H "Authorization: api-key YOUR_API_KEY"
API-Schlüssel sind nicht so effektiv wie andere Formen der API-Authentifizierung (Authentication), wie OAuth 2.0 und JSON Web Token (JWT) , aber sie spielen dennoch eine wichtige Rolle dabei, API-Produzenten bei der Überwachung der Nutzung zu helfen, da es die einfachste und am weitesten verbreitete Methode ist, APIs zu sichern.
Was sind die Vor- und Nachteile?
Vorteile
- Einfach zu implementieren: API-Schlüssel sind einfach zu implementieren und zu verwenden. Sie beinhalten das Anhängen eines Schlüssels an den Anforderungsheader, was es Entwicklern und Clients leicht verständlich und anwendbar macht.
- Einfach zu überwachen: API-Schlüssel sind einfach zu überwachen. Du kannst die Nutzung jedes Schlüssels verfolgen und sie bei Bedarf widerrufen.
- Effektive Ratenbegrenzung: API-Schlüssel sind effektiv für die Ratenbegrenzung. Du kannst ein Limit für die Anzahl der Anfragen pro Schlüssel festlegen, um Missbrauch zu verhindern.
- Geeignet für nicht sensible Daten: API-Schlüssel sind geeignet für nicht sensible Daten oder öffentlich zugängliche APIs, bei denen die Sicherheitsanforderungen geringer sind.
Nachteile
- Begrenzte Sicherheit: API-Schlüssel sind nicht sicher genug für sensible Daten, insbesondere für clientseitige Anwendungen. Sie werden häufig in Machine-to-Machine-Kommunikationen verwendet.
- Nicht geeignet für Benutzer-Authentifizierung (Authentication): API-Schlüssel sind an Anwendungen oder Systeme gebunden, nicht an einzelne Benutzer, was es schwierig macht, spezifische Benutzer zu identifizieren oder ihre Aktionen zu verfolgen.
- Kein Token-Ablauf: API-Schlüssel sind typischerweise statisch und laufen nicht ab. Wenn ein Schlüssel kompromittiert wird, könnte er unbegrenzt missbraucht werden, es sei denn, er wird manuell neu generiert.
Was sind die Anwendungsfälle für API-Schlüssel?
- Dienst-zu-Dienst-Kommunikation: API-Schlüssel sind geeignet für Szenarien, in denen Anwendungen direkt über CLIs mit APIs kommunizieren müssen. Z.B. Aufrufen von OpenAI APIs.
- Öffentliche APIs: Beim Bereitstellen von APIs für die Öffentlichkeit bieten API-Schlüssel eine einfache Methode der Zugriffskontrolle.
- Vereinfachte Einrichtung: Für schnelle und einfache Authentifizierungsanforderungen, insbesondere in der Entwicklungsphase. Im Gegensatz zur Machine-to-Machine-Authentifizierung (Authentication) erfordern API-Schlüssel keine vorherige Client-Registrierung und müssen nicht gegen ein Access Token ausgetauscht werden. Du übergibst einfach deinen API-Schlüssel als Parameter in deiner Anfrage und es funktioniert einfach.
In realen Szenarien ist der häufigste Zweck beim Erstellen von Produkten die Produktintegration. Hier ist ein typischer Anwendungsfall:
Beispiel: Integration mit Stripe
Stripe verwendet API-Schlüssel für die sichere Integration mit verschiedenen Plattformen und Anwendungen. Du kannst diese Schlüssel über das Entwickler-Dashboard erstellen, anzeigen, löschen und verwalten. Durch die Verwendung von API-Schlüsseln kannst du die Checkout- und Abrechnungsfunktionen von Stripe in dein Produkt integrieren.
Was ist der Unterschied zwischen Personal Access Tokens (PAT) und Machine-to-Machine (M2M)?
Wenn man über API-Schlüssel spricht, können auch Personal Access Tokens und Machine-to-Machine (M2M) erwähnt werden, da sie alle programmatisch auf API-Ressourcen über CLI-Befehle zugreifen oder die Kommunikation zwischen Backend-Diensten herstellen können.
Personal Access Tokens (PATs)
Ein Personal Access Token ist ebenfalls eine Zeichenfolge, repräsentiert jedoch die Identität und Berechtigungen eines bestimmten Benutzers, wird dynamisch nach erfolgreicher Authentifizierung (Authentication) oder Anmeldung generiert und hat typischerweise eine begrenzte Lebensdauer, kann jedoch erneuert werden. Es bietet feingranulare Zugriffskontrolle auf benutzerspezifische Daten und Funktionen und wird häufig für CLI-Tools, Skripte oder persönlichen API-Zugriff verwendet. Der Hauptunterschied besteht darin, dass es spezifischer ist und für benutzerspezifische Aktionen verwendet wird.
Machine-to-Machine (M2M)
M2M-Kommunikation ist, wenn Geräte automatisch Daten ohne menschliches Eingreifen austauschen.
Im Kontext von OpenID Connect (OIDC) (oder OAuth 2.0 ) verwenden M2M-Anwendungen den Client-Credentials-Flow , wie im OAuth 2.0 RFC 6749-Protokoll definiert, das ähnliche Standardprotokolle unterstützt. Es beinhaltet normalerweise eine Client-Anwendung (eine Maschine oder ein Dienst), die entweder eigenständig oder im Namen eines Benutzers auf Ressourcen zugreift. Es ist ideal für Situationen, in denen nur vertrauenswürdige Clients auf Backend-Dienste zugreifen können.