CONNECTED Conference 2023 - Aufzeichnungen jetzt hier verfügbar +++                     

Suche

über alle News und Events

 

Alle News

 

Durable Function ist eine Erweiterung der...

Weiterlesen

Wir haben eine gute, vor allem spannende und hoch...

Weiterlesen

Am 09.05.2022 wurde ein Artikel von Microsoft...

Weiterlesen

Neben den altbekannten Logic Apps (Consumption),...

Weiterlesen

Im Jahr 2022 fallen eine Reihe von .Net Versionen...

Weiterlesen

SAP in die Power Platform integrieren – In einem...

Weiterlesen

Bicep Templates benutzen eine deklarative Syntax...

Weiterlesen

In BizTalk gibt es einige Alternativen, wie...

Weiterlesen

Wir sind auf ein seltsames Phänomen bei einem...

Weiterlesen

Nach der Migration konnten in VS 2019 „normale“...

Weiterlesen

How-to: OAuth2-Flow in BizTalk Orchestration mit dynamischem SendPort

Heutzutage werden Token für die Authentifizierung und Autorisierung von Benutzern und Systemen verwendet. Vor allem bei vielen APIs wird die Autorisierung über den OAuth2-Flow über das HTTP Protokoll mit einem Bearer Token beschrieben. Der Bearer Token wird als Authorization Header in der Anfrage mitgegeben. Dieser muss davor aber erst einmal erzeugt werden, in dem wir eine Anfrage an eine Authentifizierungsstelle senden.

In folgendem Beispiel setzen wir diese Anfrage in einer Orchestration um:

1. Construct Message

Dazu müssen wir uns eine Nachricht in einem Expression-Shape erstellen, die wir an die Authentifizierungsstelle senden. Wir verwenden hierfür den Grant Type „Client Credentials“ und müssen daher eine ClientId und das Client Secret übergeben (optional Resource oder Scope). Diese Werte sollten wir aus seiner sicheren Quelle abfragen und dann als Variablen hier übergeben:

StringOAuth = "grant_type=client_credentials&client_id=" + VGClientId + "&resource=" +
VGResource + "&client_secret=" + VGClientSecret;

MGTokenRequest = new System.Xml.XmlDocument();
Helpers.LoadXLANGMsgFromString(StringOAuth, MGTokenRequest);

Über eine Helperklasse fügen wir jetzt den String noch zu unserer XML Nachricht hinzu:

publicstaticvoidLoadXLANGMsgFromString(string source, XLANGMessage dest)
{

    var bytes = Encoding.UTF8.GetBytes(source);
    using (MemoryStream ms = new MemoryStream(bytes, 0, bytes.Length, false, true))
    {
        dest[0].LoadFrom(ms);
    }
}

2. Send TokenRequest

Jetzt haben wir unsere Nachricht vollständig zusammengebaut und können diese in Schritt zwei an den Endpunkt schicken. Die NachrichtMGTokenRequest ist hier vom Typ System.Xml.XmlDocument.

3. Send-Receive-Port einrichten

Im SendPort müssen folgende Einstellungen getätigt werden:

  • HTTP Method and URL Mapping:          POST
  • Security Mode:                                    Transport
  • Outbound HTTP Headers:                     Content-Type: application/x-www-form-urlencoded

Der Rückgabewert wird dann im JSON-Format sein, weshalb wir eine ReceiveJson-Pipeline benötigen. Wichtig ist hier den NameSpace des Schemas einzutragen, welches wir im nächsten Schritt erstellen.

4. Receive TokenResponse

Nachdem wir unsere Nachricht jetzt erhalten, können wir uns die Struktur der Nachricht anschauen und daraus ein Schema generieren. Dieses Schema verwenden wir, um in der gerade beschriebenen Pipeline unsere JSON Nachricht verarbeiten zu können und wieder in die Orchestration einzulesen.

Das Schema könnte folgendermaßen aussehen:

5. AccessToken auslesen

Der letzte Schritt besteht darin, den eigentlichen AccessToken, der sich in der Nachricht befindet, auszulesen und in eine Variabel zu speichern. Dafür muss das Element „access_token“ als Distinguished Field promoted werden und kann jetzt in einem Expression Shape in unsere Variable gespeichert werden:

BearerToken = MGTokenResponse.access_token;

Der BearerToken kann jetzt für alle Aufrufe der API als Authentifizierung mitgegeben werden. Am besten funktioniert das dann in Kombination mit einem dynamischen SendPort.

Hier ist ein Beispiel, wie dieser in einem Expression Shape konfiguriert werden muss:

MGDynamicOutput(WCF.BindingType) = "WCF-WebHttp";
MGDynamicOutput(WCF.SecurityMode) = "Transport";
MGDynamicOutput(WCF.HttpMethodAndUrl) = "POST";
MGDynamicOutput(WCF.HttpHeaders) = @"Content-Type: application/json" + "\n"
+ "Authorization: Bearer " + BearerToken;

MessageSendPort(Microsoft.XLANGs.BaseTypes.Address)=VGResource + "/data/test ";
MessageSendPort(Microsoft.XLANGs.BaseTypes.TransportType)="WCF-WebHttp";

Dies ist ein quiTeq-Tipp aus Stuttgart.

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz