Bei der Implementierung von Automatisierung und Orchestrierung ist es entscheidend zu verstehen, wie die Authentifizierung von APIs funktioniert. Die meisten Produkte in Ihrer Umgebung verfügen wahrscheinlich über einen Authentifizierungsmechanismus. Um die Kommunikation mit diesen APIs zu automatisieren, müssen Sie die Feinheiten und Unterschiede der verschiedenen Authentifizierungsmethoden kennen. In diesem Blogbeitrag möchte ich Ihnen anhand der Erläuterung dreier verschiedener API-Authentifizierungsmethoden ein besseres Verständnis ermöglichen.
Benutzername- und Passwortauthentifizierung
Eine der gängigsten Authentifizierungsmethoden für REST-APIs ist die Authentifizierung mit Benutzername und Passwort. Es gibt verschiedene Arten der Authentifizierung mit Benutzername und Passwort, die am häufigsten verwendete ist jedoch die HTTP-Basisauthentifizierung. Für erfahrene API-Nutzer ist sie unkompliziert, für Anfänger kann es jedoch schwierig sein, ihre Funktionsweise und Anwendung zu verstehen.
Pro RFC2617, Um eine HTTP-Anfrage mit Basisauthentifizierung zu senden, ist eine Base64-kodierte Zeichenkette erforderlich, die aus Benutzername und Passwort, gefolgt von einem Doppelpunkt, besteht. Anschließend wird die Zeichenkette „Basic“ und ein Leerzeichen vorangestellt. Zur Verdeutlichung betrachten wir folgendes Beispiel:
Benutzername: Vorname.Nachname
Passwort: my5uper5ecretP@ssw0rd
Stellen Sie sich vor, Sie haben einen Benutzernamen und ein Passwort wie im obigen Beispiel. Um diese in einer HTTP-Anfrage an eine API zu verwenden, müssen Sie sie zuerst mit einem Doppelpunkt kombinieren:
Vorname.Nachname:mein5super5geheimesPasswort@ssw0rd
Sobald das erledigt ist, müssen sie Base64-kodiert werden. In Python könnte man das folgendermaßen machen:
import base64
auth_string = base64.b64encode(b':'.join(('first.last'.encode('latin1'), 'my5uper5ecretP@ssw0rd'.encode('latin1')))).strip()
Wenn Sie unsere Variable auth_string ausgeben würden, erhielten Sie folgenden Wert:
b'Zmlyc3QubGFzdDpteTV1cGVyNWVjcmV0UEBzc3cwcmQ='’
Nachdem Sie diese kodierte Zeichenkette haben, fügen Sie der Variablen die Zeichenkette der Authentifizierungsmethode (Basic) voran. Die vollständige Variablenzeichenkette sollte wie folgt aussehen:
Basic Zmlyc3QubGFzdDpteTV1cGVyNWVjcmV0UEBzc3cwcmQ=
Sobald diese Zeichenkette erstellt ist, wird sie einem bestimmten HTTP-Header in Ihrer HTTP-Anfrage hinzugefügt. Dieser Header ist speziell und dient der Authentifizierung. Falls Sie es noch nicht erraten haben: Der Header heißt Authorization. Praktisch, oder?
Hier ist ein Beispiel für einen cURL-Befehl mit Basisauthentifizierung:
AUTH=$(echo -ne "$BASIC_AUTH_USER:$BASIC_AUTH_PASSWORD" | base64 --wrap 0) curl \ --header "Content-Type: application/json" \ --header "Authorization: Basic $AUTH" \ --request POST \ --data '{"key1":"value1", "key2":"value2"}' \ https://example.com/
JWT-Authentifizierung
Die JWT-Authentifizierung (JSON Web Token) ist eine gängige Form der Token-Authentifizierung, die auf … basiert. RFC 7519. Die JWT-Authentifizierung besteht aus drei Hauptbestandteilen: Header, Payload und Signatur. Jeder dieser Bestandteile ist Base64-kodiert und wird zusammen mit einer HTTP-Anfrage zur Authentifizierung gesendet.
Ein JWT-Claim-Set besteht aus einem oder mehreren Claims, die in einem JSON-Objekt angegeben werden. Jeder Claim in einem Claim-Set hat einen eindeutigen Schlüssel und einen zugehörigen Wert. Die typische Struktur eines JWT-Claim-Sets sieht beispielsweise so aus:
{ “iss”: “josh”, “exp”: 1617221146, “https://api.mycompany.com/some....”: true }
Jeder Schlüssel und Wert muss eindeutig sein und wird als einzelner Anspruch innerhalb des Anspruchssatzes betrachtet. Die angegebenen Schlüssel sind beliebig und nicht durch den RFC-Standard vorgeschrieben. Das bedeutet, dass die Struktur des Anspruchssatzes bei der JWT-Authentifizierung von der verwendeten API bzw. dem verwendeten Dienst abhängt.
Genau wie die Header- und Signaturwerte wird auch der JWT-Claim (Payload) nach der Definition base64-kodiert. Sie können diese Werte testen auf https://jwt.io sowie.
OAuth2-Authentifizierung
Die OAuth2-Authentifizierung erfreut sich zunehmender Beliebtheit, da sie viele verschiedene Authentifizierungsmethoden (Flows) für denselben Endpunkt unterstützt. Dies ermöglicht Entwicklern die Erstellung robuster Dienste, die die Autorisierung für unterschiedliche Situationen – wie Webanwendungen, Desktop-Anwendungen, Mobilgeräte usw. – durch einfache Anpassungen weniger Details ermöglichen, anstatt für jede Situation einen komplett anderen Authentifizierungsmechanismus zu implementieren.
Um die Konzepte der OAuth2-Authentifizierung besser zu verstehen, habe ich dieses Diagramm erstellt, das die vier Kernkomponenten zeigt:
-
Ein Benutzer oder ein System, das Zugriff benötigt
-
Ein Server, der für die Autorisierung zuständig ist
-
Eine Anwendung, der über den Autorisierungsserver Zugriff gewährt wird.
-
Diese Anwendung greift dann auf Basis dieser Autorisierung auf Daten zu.

Wenn Sie mehr über OAuth2 erfahren möchten, lesen Sie bitte die dreiteilige Artikelserie, die ich geschrieben habe und in der ich OAuth2 detaillierter erkläre:
Bei der Betrachtung der Authentifizierungstypen sind OAuth2 und JWT sicherer als Basic, und Sie werden wahrscheinlich auf beide stoßen, wenn Sie APIs verwenden, insbesondere bei der Arbeit mit Produkten wie EDR, SIEM usw.
Es gibt noch viele weitere Arten der REST-API-Authentifizierung sowie Variationen der oben genannten Methoden, aber ich hoffe, dies hat Ihnen geholfen, die drei gebräuchlichsten Authentifizierungsmethoden für APIs zu verstehen.

