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

Suche

über alle News und Events

 

Alle News

 

Um HTML zum PDF zu konvertieren, werden wir...

Read more

Die Logic Apps-Plattform von Microsoft ermöglicht...

Read more

Du bist neugierig auf aktuelle KI-Technologien und...

Read more

Am 27.09. ab 12.30h starten die vierten QUIBIQ...

Read more

"Das Beste von SAP und Microsoft nutzen": auf dem...

Read more

Azure Bicep wird verwendet, um Ressourcen in Azure...

Read more

In einer Welt, die immer digitaler wird, ist es...

Read more

Dieser Artikel beschreibt wie JSON-Dateien anhand...

Read more

Vom 5. bis 7. Juni findet in London wieder die...

Read more

Vom 5. bis 7. Juni findet in London wieder die...

Read more

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