Suche

über alle News und Events

 

Alle News

 

Mit diesem Artikel wird ein klares Verständnis von...

Weiterlesen

In einer Logic App werden häufig Variablen...

Weiterlesen

Es ist wichtig, dass Unternehmen und...

Weiterlesen

This article requires you to have basic knowledge...

Weiterlesen

Wir nutzen für einige unserer Projekte Dependency...

Weiterlesen

Ein Kunde muss innerhalb eines BizTalk Mappings...

Weiterlesen

Wer schon einmal mit Logic Apps und der...

Weiterlesen

Christoph Hanser, einer der Geschäftsführer von...

Weiterlesen

In Azure DevOps ist es möglich ein BizTalk Projekt...

Weiterlesen

Wir haben während unseres...

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