API-Autorisierungsmethoden
In diesem Artikel werden wir drei gängige API-Autorisierungsmechanismen untersuchen: API-Schlüssel, Basic Authentication und OAuth JWT-Token. Am Ende werden wir auch darüber sprechen, wie Logto dir hilft, deine APIs mit OAuth JWT-Token zu schützen.
Einleitung
In der heutigen Welt sind APIs das Rückgrat moderner Anwendungen. Sie sind der primäre Weg, um auf Daten und Funktionen von Backend-Diensten zuzugreifen. APIs ermöglichen es verschiedenen Softwaresystemen unterschiedlicher Parteien, miteinander zu kommunizieren und Daten auszutauschen, was sie für Unternehmen unverzichtbar macht. APIs sind jedoch auch ein häufiges Ziel für Angreifer. Der Bedarf an API-Schutz ist größer als je zuvor.
API-Schutz ist der Prozess, APIs vor unbefugtem Zugriff, Missbrauch und Angriffen zu sichern. Es ist ein kritischer Bestandteil jeder API-Strategie. In diesem Artikel werden wir drei gängige API-Schutzmechanismen untersuchen: API-Schlüssel, Basic Authentication und OAuth JWT-Token. Am Ende werden wir auch zeigen, wie Logto deine APIs mit OAuth JWT-Token schützt.
API-Schlüssel
Der API-Schlüssel ist die einfachste und am weitesten verbreitete Methode, um APIs zu sichern. Ein API-Schlüssel ist eine lange Zeichenkette, die vom API-Anbieter generiert und mit autorisierten Benutzern geteilt wird. Dieser Schlüssel muss in der 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. Sie haben jedoch Einschränkungen in Bezug auf die Sicherheit und werden oft für die Maschinen-zu-Maschinen-Kommunikation verwendet.
z.B.
Vorteile:
- Einfach zu implementieren: API-Schlüssel sind leicht zu implementieren und zu verwenden. Sie erfordern das Anhängen eines Schlüssels an die Anforderungsheader, was es zu einer einfachen Methode für Entwickler und Clients macht, sie zu verstehen und anzuwenden.
- Einfach zu überwachen: API-Schlüssel sind einfach zu überwachen. Du kannst die Nutzung jedes Schlüssels nachverfolgen und sie bei Bedarf widerrufen.
- Effektive Rate-Limits: API-Schlüssel sind wirksam für Rate-Limits. Du kannst ein Limit für die Anzahl der Anfragen pro Schlüssel festlegen, um Missbrauch zu verhindern.
- Geeignet für nicht-sensitive Daten: API-Schlüssel sind geeignet für nicht-sensitive Daten oder öffentlich zugängliche APIs, bei denen die Sicherheitsanforderungen niedriger sind.
Nachteile:
- Begrenzte Sicherheit: API-Schlüssel sind nicht sicher genug für sensible Daten, insbesondere für clientseitige Anwendungen. Sie werden oft in Maschinen-zu-Maschinen-Kommunikation verwendet.
- Nicht geeignet für Benutzer-Authentifizierung: API-Schlüssel sind an Anwendungen oder Systeme und nicht an einzelne Benutzer gebunden, was es schwierig macht, spezifische Benutzer zu identifizieren oder ihre Aktionen zu verfolgen.
- Keine Token-Ablaufzeit: 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.
Basic Authentication
Basic Authentication ist eine weitere gängige Methode, um APIs zu sichern. Es ist ein einfaches Authentifizierungsschema, das im HTTPs-Protokoll integriert ist. Es beinhaltet das Senden eines Benutzernamens und Passworts in der Anforderungsheader. Der Server überprüft dann die Anmeldedaten und gibt die angeforderte Ressource zurück, wenn sie gültig sind. Beispielsweise verwenden viele Webanwendungen und RESTful-APIs Basic Authentication als schnelle und einfache Möglichkeit, Benutzer zu authentifizieren. Basic Authentication ist sicherer als API-Schlüssel, da es einen Benutzernamen und ein Passwort statt eines statischen Schlüssels verwendet. Es ist jedoch immer noch nicht sicher genug für sensible Daten, da die Anmeldeinformationen im Klartext übertragen werden und daher anfällig für Abfangen sind. Basic Authentication eignet sich für interne Systeme, bei denen die Netzverbindung sicher ist, z.B. Maschine-zu-Maschine.
z.B.
oder
Vorteile:
- Stärkere Sicherheit: Basic Authentication ist sicherer als API-Schlüssel, da es einen Benutzernamen und ein Passwort statt eines statischen Schlüssels verwendet.
- Weit verbreitet: Basic Authentication ist weit verbreitet und wird von den meisten Webservern und Browsern unterstützt.
- Einfachheit: Wie API-Schlüssel ist auch Basic Authentication relativ einfach einzurichten und zu verwenden.
Nachteile:
- Anmeldeinformationen-Exposition: Basic Authentication sendet Anmeldedaten im Klartext, was sie anfällig für Abfangen macht, wenn sie nicht über eine sichere Verbindung (HTTPS) verwendet wird.
- Keine Token-Ablaufzeit: Basic Authentication unterstützt keine Token-Ablaufzeit. Wenn ein Token kompromittiert wird, könnte es unbegrenzt missbraucht werden, es sei denn, es wird manuell neu generiert.
OAuth JWT-Token
JSON Web Token (JWT), definiert durch RFC 7519, ist ein offener Standard zur sicheren Übertragung von Informationen zwischen Parteien als JSON-Objekt. Es wird häufig für Authentifizierung und Autorisierung in Webanwendungen und APIs verwendet.
Ein signiertes JWT hat folgendes Format:
Es besteht aus drei Teilen, die durch .
getrennt sind: dem Header, dem Payload und der Signatur.
Hier ist ein Beispiel für ein JWT:
- header: Enthält Informationen über den Typ des Tokens und den Hash-Algorithmus, der verwendet wurde, um es zu signieren.
- payload: Enthält die Ansprüche (Statements) über den Benutzer und andere Daten.
- signature: Ist ein Hash des Headers und des Payloads, signiert mit einem geheimen Schlüssel.
OAuth ist ein umfassender offener Standard zur Sicherung von APIs und zur Zugriffsdelegation, der häufig verwendet wird, um es Client-Benutzern zu ermöglichen, Websites oder Anwendungen Zugriff auf ihre Informationen auf anderen Websites zu gewähren, ohne ihnen die Passwörter zu geben.
In Verbindung mit JWT bieten OAuth JWT-Token eine robuste Sicherheitslösung. Anstatt bei jeder Anfrage sensible Informationen wie Benutzernamen und Passwörter zu übermitteln, werden OAuth JWT-Token autorisierten Clients nach erfolgreicher Authentifizierung ausgestellt. Diese Token enthalten Informationen über den Benutzer und seine Berechtigungen. Zusätzlich sind JWT-Token digital signiert, um Manipulationen zu verhindern, und können ablaufen, was eine zusätzliche Sicherheitsebene bietet.
Ein Hauptvorteil von OAuth JWT-Token ist ihre Flexibilität. Sie können für verschiedene Arten von Anwendungen verwendet werden, einschließlich Web- und mobilen Apps, Single Sign-On-Lösungen und mehr. Zum Beispiel verwenden große Social-Media-Plattformen wie Facebook, Twitter und LinkedIn OAuth JWT-Token, um Benutzer zu authentifizieren und Drittanbieteranwendungen sicheren Zugriff auf Benutzerdaten zu ermöglichen.
Vorteile:
- Erhöhte Sicherheit: OAuth JWT-Token bieten ein höheres Maß an Sicherheit. Sie sind digital signiert und können verschlüsselt werden, was das Risiko eines unbefugten Zugriffs und einer Datenmanipulation verringert.
- Benutzeridentität und Zugriffskontrolle: JWT-Token können Benutzeridentitätsinformationen enthalten und Ansprüche (Claims) beinhalten, die festlegen, welche Aktionen oder Ressourcen ein Benutzer auszuführen oder auf sie zugreifen darf.
- Fein granulierte Zugriffskontrolle: JWT-Token können verwendet werden, um eine fein granulierte Zugriffskontrolle umzusetzen. Du kannst zum Beispiel angeben, auf welche Ressourcen ein Benutzer zugreifen kann und welche Aktionen er auf diesen Ressourcen ausführen kann.
- Token-Ablauf: OAuth JWT-Token können so eingestellt werden, dass sie nach einem bestimmten Zeitraum ablaufen, was das Risiko eines Missbrauchs verringert.
Nachteile:
- Komplexität: OAuth JWT-Token sind komplexer als API-Schlüssel und Basic Authentication. Sie erfordern zusätzliche Schritte, um eingerichtet und verwendet zu werden.
- Token-Verwaltung: OAuth JWT-Token müssen verwaltet und bei Bedarf widerrufen werden. Das kann eine Herausforderung für groß angelegte Anwendungen mit vielen Benutzern und Clients sein.
- Ressourcenverbrauch: Die Erstellung und Validierung von Token kann zu einem gewissen Leistungsaufwand führen, was in hoch frequentierten Szenarien ein Problem darstellen könnte.
Logto API-Schutz
Die Wahl der Authentifizierungsmethode hängt von den spezifischen Anforderungen und Sicherheitsüberlegungen deiner Anwendung ab. API-Schlüssel sind einfach, aber weniger sicher, Basic Authentication bietet mehr Sicherheit, fehlt aber an Benutzeridentitätsfunktionen, während OAuth JWT-Token robuste Sicherheit und Benutzeridentitätsfunktionen bieten, aber die Komplexität in der Implementierung und Verwaltung erhöhen.
Logto bietet eine einfache und sichere Möglichkeit, deine API mit OAuth JWT-Token zu schützen. Es unterstützt sowohl die OAuth 2.0- als auch die OpenID Connect (OIDC)-Standards, die dir die Wahl der Authentifizierungsmethode ermöglichen, die am besten zu deinen Bedürfnissen passt. Du kannst den client_credentials
-Flow für die Maschinen-zu-Maschinen-Kommunikation und den authorization_code
-Flow für Webanwendungen verwenden.
Maschinen-zu-Maschinen-Kommunikation
Logto verwendet den client_credentials
-Flow für Maschinen-zu-Maschinen-Anwendungen. Dieser Flow eignet sich für die Kommunikation von Backend-Servern, bei denen der Client ein vertraulicher Client ist, der die Client-Anmeldedaten sicher speichern kann. Es ist auch als "Zwei-Bein-OAuth" bekannt, da es keine Benutzer einbezieht. Die Client-Anmeldedaten werden direkt als Autorisierungsberechtigung verwendet, um ein Zugriffstoken zu erhalten.
Der Integrationsablauf ist einfach und unkompliziert:
- Erstelle eine API-Ressource in der Logto-Konsole.
- Erstelle einen Maschinen-zu-Maschinen-Client in der Logto-Konsole.
- Sende eine Anfrage an den Logto-Token-Endpoint, um ein Zugriffstoken zu erhalten.
- Greife mit dem Zugriffstoken auf die geschützte Ressource zu.
Weitere Details findest du in unserer Dokumentation zur Maschinen-zu-Maschinen-Integration.
Web-Anwendungen
Für öffentliche Clients wie Webanwendungen verwendet Logto den authorization_code
-Flow zur Benutzerauthentifizierung. Dieser Flow eignet sich für Webanwendungen, bei denen der Client ein öffentlicher Client ist, der die Client-Anmeldedaten nicht sicher speichern kann. Es ist auch als "Drei-Bein-OAuth" bekannt, da es einen Benutzer einbezieht. Der Benutzer wird zum Autorisierungsserver umgeleitet, um den Client zu authentifizieren und zu autorisieren. Der Client verwendet dann den Autorisierungscode, um ein Zugriffstoken zu erhalten.
Der Integrationsablauf ist etwas komplizierter als der Maschinen-zu-Maschinen-Flow:
Bitte sieh dir unseren Artikel Schütze deine Express.js API mit JWT und Logto als umfassendes Beispiel dafür an, wie Logto in React integriert und deine Express-Server-APIs mit JWT-Token aufgerufen werden können.