Programmgesteuerte Authentifizierung: API-Schlüssel, persönlicher Zugangstoken und OAuth-Client-Anmeldefluss
Entdecke die Schlüsselkonzepte und häufige Anwendungsfälle für API-Schlüssel, persönliche Zugangstokens (PAT) und Logto Maschine-zu-Maschine (M2M) Anmeldeinformationen.
Hintergrund
In der Softwareentwicklung, wenn wir programmatisch auf API-Ressourcen durch CLI-Befehle zugreifen oder Kommunikation zwischen Backend-Diensten herstellen müssen, gibt es normalerweise drei Authentifizierungsmechanismen, die von uns Entwicklern häufig verwendet werden: API-Schlüssel, persönlicher Zugangstoken (PAT) und OAuth-Client-Anmeldefluss (bei Logto als Maschine-zu-Maschine bezeichnet). Aber was sind die Unterschiede zwischen ihnen? Was ist das am besten geeignete Szenario für jede dieser Methoden? In diesem Blogbeitrag werden wir die Ähnlichkeiten, Unterschiede beleuchten und Einblicke geben, wann jedes in verschiedenen Szenarien eingesetzt werden sollte.
Definitionen
- API-Schlüssel: Ein einfacher String, der deine Anfrage an eine API-Ressource authentifizieren kann.
- Persönlicher Zugangstoken (PAT): Ebenfalls ein einfacher String, der einen Benutzer repräsentiert, wenn er zur Authentifizierung einer API-Ressource verwendet wird. Es ist eine Delegation eines Benutzers.
- Logto Maschine-zu-Maschine (Logto M2M): Ein standardmäßiger OAuth-Client-Anmeldefluss, bei dem ein Client im Voraus registriert werden muss und der die Verwendung der Client-ID und des Geheimnisses erfordert, um ein Zugriffstoken zu erhalten. Somit repräsentiert das Logto M2M-Anmeldedatum einen vertrauenswürdigen Client, und die Natur des OAuth-Client-Anmeldeflusses macht es relativ kompliziert, es zu verwenden.
Ähnlichkeiten
1. Authentifizierungszweck
- Alle drei, API-Schlüssel, PAT und Logto M2M, dienen dem Hauptzweck, einen Benutzer oder eine Anwendung zu authentifizieren, um auf einen bestimmten Dienst oder eine Ressource zuzugreifen. Sie fungieren als Anmeldeinformationen, um die Identität des Anfragenden zu beweisen, und werden normalerweise in CLI-Befehlen oder bei Backend-zu-Backend-Kommunikationsszenarien verwendet.
2. Sicherheitsmaßnahmen
- Alle diese drei Authentifizierungsmethoden sollten unter Sicherheitsaspekten behandelt werden. Die Entwickler müssen eine sichere Speicherung und Übertragung sicherstellen, um unbefugten Zugriff zu verhindern.
Unterschiede
1. Benutzerkontext
- API-Schlüssel identifiziert keinen Hauptnutzer und liefert auch keine Autorisierungsinformationen. Daher werden die API-Schlüssel häufig für den Zugriff auf öffentliche Daten oder Ressourcen anonym verwendet. Nicht alle Dienste unterstützen die Verwendung von API-Schlüsseln.
- PAT stellt Benutzeridentitäten dar und repräsentiert dich, wenn es zur Anforderung einer API-Ressource verwendet wird. In einigen Systemen ist es PATs nicht erlaubt, auf bestimmte Dienste zuzugreifen. Zum Beispiel das Veröffentlichen von NuGet-Paketen im Azure Artifacts-Feed.
- Logto M2M-Anmeldeinformationen können nur von vertrauenswürdigen Clients verwendet werden. Der Client muss im Voraus registriert werden, um authentifiziert zu werden. Wenn Logto M2M-Anmeldeinformationen verwendet werden, repräsentiert es den vertrauenswürdigen Client anstelle des Benutzers, der es verwendet.
2. Granularität der Berechtigungen
- PAT und Logto M2M-Anmeldeinformationen bieten normalerweise eine feinere Kontrolle über Berechtigungen im Vergleich zu API-Schlüsseln, was eine präzise Kontrolle darüber ermöglicht, welche Aktionen ausgeführt werden können.
3. Tokenformat
- API-Schlüssel und PAT sind normalerweise undurchsichtige Strings, einfach und einfach.
- Zugriffstokens, die über den Logto M2M-Mechanismus ausgestellt werden, sind normalerweise im JWT-Format.
4. Autorisierungsfluss
- API-Schlüssel und PAT sind systemgenerierte undurchsichtige Strings, es sind keine Authentifizierungsflüsse während des Prozesses beteiligt. Zum Beispiel kannst du die Google Cloud Natural Language API wie folgt aufrufen:
- Logto M2M verwendet den standardmäßigen OAuth 2.0-Client-Anmeldefluss. Jeder Client muss im Voraus ein Paar von Client-ID und -Geheimnis erhalten, mit denen der Client später ein Zugriffstoken erhalten kann. Der Client verwendet dann das Zugriffstoken, um auf API-Ressourcen zuzugreifen.
Wann man welches verwendet
API-Schlüssel
- Dienst-zu-Dienst-Kommunikation: API-Schlüssel eignen sich für Szenarien, in denen Anwendungen direkt über CLIs mit APIs kommunizieren müssen. Zum Beispiel das Aufrufen von OpenAI-APIs.
- Öffentliche APIs: Wenn APIs der Öffentlichkeit zugänglich gemacht werden, bieten API-Schlüssel eine einfache Methode zur Zugangskontrolle.
- Vereinfachtes Setup: Für schnelle und einfache Authentifizierungsanforderungen, insbesondere in der Entwicklungsphase. Im Gegensatz zu Logto M2M benötigen API-Schlüssel keine vorherige Clientregistrierung und müssen auch nicht für ein Zugriffstoken ausgetauscht werden. Du übergibst einfach deinen API-Schlüssel als Parameter in deiner Anfrage und es funktioniert einfach.
Persönlicher Zugangstoken (PAT)
- Benutzerspezifische Aktionen: Wenn eine Anwendung Aktionen im Namen eines Benutzers ausführen muss.
- Fein abgestimmte Zugriffskontrolle (Benutzer): Wenn präzise Kontrolle über die Aktionen erforderlich ist, die ein Benutzer ausführen kann.
Logto Maschine-zu-Maschine (Logto M2M)
- Sicherheit: Logto M2M ist ideal für Szenarien, in denen nur vertrauenswürdige Clients auf die Backend-Dienste zugreifen dürfen.
- Fein abgestimmte Zugriffskontrolle (Client): Wenn präzise Kontrolle über die Aktionen erforderlich ist, die eine Anwendung ausführen kann.
Fazit
Zusammenfassend hängt die Wahl zwischen API-Schlüsseln, PATs und Logto M2M von den spezifischen Anforderungen deiner Anwendung ab, unabhängig davon, ob es benutzerspezifische Aktionen, Maschine-zu-Maschine Kommunikation oder eine Kombination aus beiden umfasst. Bewerte die Sicherheits- und Funktionsanforderungen, um die geeignetste Authentifizierungsmethode für deinen Anwendungsfall zu bestimmen.
Der Logto M2M-Mechanismus ermöglicht es Benutzern, granulare Zugriffskontrollen über die RBAC (rollenbasierte Zugriffskontrolle) -Funktion festzulegen. Wir planen auch die Unterstützung von API-Schlüsseln und PAT in naher Zukunft. Bitte bleib dran für unsere Feature-Updates!