Beispiel zum Erstellen einer HTTP-Anforderungsauthentifizierung in Prozessen

RGeschrieben vonRiku Virtanen Vor über einer Woche aktualisiertTable of contents

Was ist Whitelisting?

Mithilfe von Whitelists können Sie den Zugriff einschränken und bestimmte Aufrufe des Prozesses zulassen. In Frends können Sie den Zugriff auf Prozesse einschränken, die API und HTTP-Trigger verwenden, indem Sie den Autorisierungsheader konfigurieren, den der Trigger bei eingehenden Aufrufen überprüft. In einigen Fällen reichen diese nicht aus und Sie benötigen zusätzliche Einschränkungen, um sicherzustellen, dass der Aufruf von der richtigen Quelle stammt. Diese Fälle sind der Grund für Whitelists. Leider gibt es derzeit in Frends keine vorgefertigten Lösungen, die diese Funktion implementieren könnten. Whitelists können nur innerhalb des Prozesses selbst erstellt werden.

IP-Whitelist

Eine IP-Whitelist kann innerhalb des Prozesses implementiert werden, indem die IP-Adresse des Anrufers überprüft wird. Dies kann mithilfe des#trigger.data.httpClientIpReferenz. Diese Referenz ruft die IP-Adresse aus der eingehenden Nachricht ab und Sie können dann prüfen, ob die IP diejenige ist, die Sie zulassen möchten. Die Prüfung kann erfolgen, indem Sie eine Liste zulässiger IP-Adressen erstellen und prüfen, ob die IP-Adresse in dieser Liste enthalten ist. Die beste Vorgehensweise hierfür besteht darin, Umgebungsvariablen zum Speichern der zulässigen IP-Adressen zu verwenden. Sie können dies tun, indem Sie eine neue Umgebungsvariablengruppe mit einer Variablen vom Typ „Liste“ erstellen.

Dabei können Sie die Umgebungsvariablenreferenz verwenden#Umgebungum auf die spezifische Variable zu verweisen und zu prüfen, ob die eingehende IP in dieser Liste enthalten ist. Die Frends-Umgebungsvariablenliste ist jedoch ein Array von Objekten:System.Objekt[]die nicht dieEnthält()Methode. Aus diesem Grund müssen Sie das Array in eine System.Generic.Collections.List konvertieren. Die beste Methode ist, das Array in eineObjekt[]Array und dann mit demToList()Methode, um das Array in eine Liste umzuwandeln. Anschließend können Sie dieEnthält()Methode, um zu überprüfen, ob die eingehende IP in der Liste enthalten ist.

Vollständiger Code:((Objekt[])#env.Sicherheit.ZulässigeIP-Adressen).ToList().Enthält(#trigger.data.httpClientIp)

Nach dem Entscheidungselement können Sie entweder z. B. eine nicht autorisierte HTTP-Antwort ausgeben oder mit den anderen Teilen des Prozesses fortfahren.

Grundlegende Authentifizierung wird ausgeführt

Die grundlegende Authentifizierung im Frends HTTP Trigger authentifiziert Anforderungsbenutzer entweder gegenüber Active Directory (AD) oder lokalen Computerbenutzern. Dies hängt vom Agentenbenutzer ab. Falls der Agent ein lokales Konto verwendet, werden Benutzer gegenüber den lokalen Computerbenutzern authentifiziert. Wenn der Agent ein AD-Benutzerkonto verwendet, werden Benutzer gegenüber den AD-Benutzern authentifiziert.

Bei Verwendung von Frends PaaS-Agenten wird die Basisauthentifizierung nicht unterstützt. Sie können die Basisauthentifizierung jedoch innerhalb des Prozesses selbst erstellen. Wenn Sie die Basisauthentifizierung innerhalb des Prozesses erstellen, müssen Sie den Autorisierungsparameter im HTTP-Trigger auf „Keine“ setzen. Dies bedeutet, dass Frends nicht versucht, die Autorisierung im Trigger zu verarbeiten, und die Anfrage mit dem Hauptteil des Prozesses fortfahren lässt.

Die einfachste Möglichkeit, eine Basisauthentifizierung innerhalb des Prozesses durchzuführen, ist die Verwendung von Umgebungsvariablen. Da wir wissen, dass die Basisauthentifizierung aus Benutzername und Passwort besteht, die durch einen Doppelpunkt getrennt sind (Benutzername:Passwort), können wir Benutzeranmeldeinformationen in diesem Format in Umgebungsvariablen speichern. Wir können eine neue Umgebungsvariablengruppe erstellen und in dieser Gruppe eine Variable vom Typ „Liste“ einrichten, in der wir alle Anmeldeinformationen speichern können, die wir zum Senden von Anfragen an den Prozess zulassen möchten.

Beispiel

Zunächst können wir prüfen, ob die Anfrage einen Autorisierungsheader hat und ob der korrekte Wert dieses Headers die Basisauthentifizierung ist. Dies kann erreicht werden, indem zunächst geprüft wird, ob#trigger.data.httpAuthorizationist null oder leer:!string.IsNullOrEmpty(#trigger.data.httpHeaders.Authorization). Als zweites wollen wir wissen, ob der Autorisierungsheader die richtige Authentifizierungsmethode verwendet. Dies kann überprüft werden, wenn der Wert mit „Basic“ beginnt:#trigger.data.httpHeaders.Authorization.ToLower().StartsWith("basic"). In diesem BeispielToLower()Die Methode wird verwendet, um sicherzustellen, dass die Groß-/Kleinschreibung keine Rolle spielt.

Vollständiger Code:

!string.IsNullOrEmpty(#trigger.data.httpHeaders.Authorization) && #trigger.data.httpHeaders.Authorization.ToLower().StartsWith("basic")

Dadurch werden Anfragen gefiltert, die nicht die richtigen Header haben. Als Nächstes können wir die eigentliche Basic-Authentifizierungsprüfung durchführen. Wir wissen, dass der Headerwert der Basic-Authentifizierung in einer Base64-formatierten Zeichenfolge vorliegt, die mit dem Wort „Basic“ beginnt: Basic <Base64String>. Damit wir die Anmeldeinformationen aus der Zeichenfolge extrahieren können, müssen wir einige Änderungen und Konvertierungen daran vornehmen. Zuerst müssen wir die Zeichenfolgen im „Basic“- und Base64-Format voneinander trennen. Dies kann mit folgendem Code erfolgen:

var authPart = #trigger.data.httpHeaders.Authorization.Replace("Basic", string.Empty).TrimStart();.

Hier verwenden wir dieErsetzen()Methode, um „Basic“ durch eine leere Zeichenfolge zu ersetzen. Als Nächstes entfernen wir die führenden Leerzeichen aus der Base64-formatierten Zeichenfolge.

Im nächsten Schritt wird der Base64-String in Bytes umgewandelt. Dies kann auch mit einem Code erfolgen:var credsBytes = Convert.FromBase64String(authPart);. Anschließend können wir den String aus den Bytes extrahieren, indem wir den Namespace System.Text.Encoding verwenden, um die Bytes in einen String umzuwandeln:var creds = System.Text.Encoding.ASCII.GetString(credsBytes);. Beachten Sie, dass Sie bei dieser Methode eine spezielle Kodierung verwenden müssen, wenn das Passwort Sonderzeichen enthalten kann. Danach können wir die konvertierten Anmeldeinformationen im Klartext zurückgeben.

Vollständiger Code hierfür:

var authPart = #trigger.data.httpHeaders.Authorization.Replace("Basic", string.Empty).TrimStart();

var credsBytes = Convert.FromBase64String(authPart);

var creds = System.Text.Encoding.ASCII.GetString(credsBytes);

Credits zurückgeben;

Dadurch können wir überprüfen, ob unsere Umgebungsvariablen diese Anmeldeinformationen gespeichert haben. Dies kann erreicht werden, indem die Umgebungsvariable in ein Objektarray umgewandelt und in den Listentyp konvertiert wird. Anschließend können wir denEnthält()Methode, um zu überprüfen, ob die Anmeldeinformationen darin enthalten sind.

Vollständiger Code:((Objekt[])#env.Security.AllowedUsers).ToList().Contains(#var.credentials);

Dies ist eine Möglichkeit, die Benutzeranmeldeinformationen innerhalb einer Anfrage mithilfe der Basisauthentifizierung zu überprüfen.

Beachten Sie, dass Frends nicht der richtige Ort zum Speichern von Benutzeranmeldeinformationen ist und diese Demo sie verwendet, um zu demonstrieren, wie die Basisauthentifizierung durchgeführt wird. Eine sicherere Methode ist die Verwendung einer Art Datenbank oder AD.

Der nächste Artikel ist der Beginn des ArchitekturkursesEinführung in die Schlüsselkonzepte der Frends-Architektur


Verwandte ArtikelHTTP-TriggerOAuth-Authentifizierung für CData-AufgabenEinführung in HTTP-TriggerEinführung in die Authentifizierung in HTTP-IntegrationenEinführung in den Lenker