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

Suche

über alle News und Events

 

Alle News

 

Messaging mit dem Service Bus ermöglicht die...

Weiterlesen

Sebastian Meyer, Microsoft & SAP...

Weiterlesen

Für Entwickler, Architekten, Projektleiter und...

Weiterlesen

In der Welt der Softwareentwicklung ist die...

Weiterlesen

QUIBIQ spendet für den guten Zweck – und für...

Weiterlesen

Eine bestimmte Antwort auf einen HTTP Request zu...

Weiterlesen

In einer Welt, die von stetigem Wandel geprägt...

Weiterlesen

In einem unserer Kundenprojekte, war das Ziel eine...

Weiterlesen

QUIBIQ Hamburg wird mit dem Hamburger...

Weiterlesen

Zwei Tage lang wurde vom 14.-15.11 wieder das...

Weiterlesen

How-to: Custom Pipeline Component, um dem HTTP Header Zugangsdaten aus dem Windows Credential Store hinzuzufügen

Es scheint ein altbekanntes Problem zu sein, einen Service aus BizTalk per Send Port mit Basic Authentifizierung anzusprechen. Der WCF-WebHttp Adapter, der in BizTalk 2013 R2 herauskam, hat einen Known Bug, dass bei der Auswahl der Basic Authentifizierung zwar Benutzername und Passwort angegeben werden können, diese aber komplett ignoriert werden und nie in den Header gelangen.

https://www.connected-pawns.com/2017/04/09/wcf-webhttp-adapter-basic-authorisation/

Dieses Verhalten hat sich bis BizTalk 2020 gehalten.

Verschiedene Workarounds und Lösungen sind somit entstanden:

  1. Den Header in den Port Properties anpassen, indem man im Tab «Messages» den Authorization-Tag mit den Base64 kodierten Zugangsdaten hinzufügt. Dies hat allerdings den klaren Nachteil, dass die Zugangsdaten praktisch frei einsehbar sind, da Base64 keine Verschlüsselung und problemlos rückwärts konvertierbar ist.
  2. Das Schreiben eines Custom Behaviors, welches die Zugangsdaten dem Header hinzufügt.
  3. Das Schreiben eines Custom Pipeline Components, welche die Zugangsdaten dem Header hinzufügt.

Nachfolgend wird letztere Möglichkeit gezeigt.

Sogleich stellt sich die Frage, woher die Zugangsdaten kommen. Hartkodiert in die Custom Pipeline genügte uns nicht, also nutzen wir den Windows Credential Store. Damit lassen sich Zugangsdaten für einen Windows-Benutzer in Windows ablegen und dann wieder anhand eines Schlüsselworts (Target) im Klartext abholen. Da es über die Identität des angemeldeten Benutzers passiert, besteht grundsätzlich keine Gefahr, dass jemand Unbefugtes an diese gelangt, es sei denn, er kennt die Anmeldedaten des entsprechenden Benutzers.

Custom Pipeline Component

Ich werde nicht genau auf die Erstellung einer Custom Pipeline Component eingehen, da es im Internet bereits gute Tutorials dafür gibt (https://blog.tallan.com/2006/11/21/custom-pipeline-components-part-1-getting-started/).Durch das Implementieren der benötigten Interfaces werden die essentiellen Methoden eingebunden. Die Interessanteste davon ist wohl Execute, wo wir die Nachricht und deren Kontext erhalten und bearbeiten können.

Die Zugangsdaten werden also für den aktuellen Benutzer (welcher bei der Host-Instanz eingetragen ist, mit welcher der SendPort und somit die Pipeline läuft) anhand des in der Pipeline konfigurierten Schlüsselworts (Target) aus dem Windows Credential Store geholt, in einen Base64-String umgewandelt und mit dem «Authentication: Basic »-Präfix dem bestehenden HTTP Header hinzugefügt.

Die Abholung der Zugangsdaten aus dem Windows Credential Store passiert in der Klasse Credential aus der Drittanbieter-Komponente CredentialManagement (verfügbar als Nuget Package https://www.nuget.org/packages/CredentialManagement/). Der zu schreibende Code zeigt sich also sehr simpel:

Verwendung

Nachdem die DLL, in welcher unser Custom Pipeline Component definiert ist, über die BizTalk Administration Console als Ressource registriert ist und sich somit im GAC befindet, sollte sie (nach allfälligem Neustart von Visual Studio) der Toolbox hinzugefügt werden können.

(In der Toolbox im Pipeline-Designer > Rechtsklick > Choose items… > Registereintrag «BizTalk Pipeline Components» > Browse… > DLL auswählen > Entsprechende Checkbox anhaken)

Danach kann sie wie jede andere Komponente in der Pipeline verwendet werden.

Ist dann auch die DLL, in welcher die Pipeline mit dem Custom Pipeline Component verwendet wird, in BizTalk registriert, sollte sie bei einem SendPort ausgewählt werden können und in den Properties das Feld für das Eintragen des Targets anbieten.

Werden für den Benutzer, der in der entsprechenden Host-Instanz eingetragen ist, nun Zugangsdaten mit dem eingetragenen Target «System_XY_Credentials» erstellt, werden diese für die Anmeldung beim Endpunkt verwendet.

Windows Credential Store

Der Windows Credential Store kann entweder über das Windows UI (Control Panel\User Accounts\Credential Manager) oder über die Kommandozeile mit dem Befehl cmdkey (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/cmdkey) verwendet werden.

Insbesondere, wenn Zugangsdaten für einen Benutzer angelegt werden müssen, bei dem man sich gar nicht bei Windows anmelden kann, erweist sich die Kommandozeile als Rettung. Damit kann man nämlich auch Zugangsdaten für einen anderen Benutzer verwalten, sofern man seine Anmeldedaten besitzt.

Raphael, QUIBIQ Schweiz

 

 

 

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