Asynchrone Web-Service

Verwendung

Bei einem asynchronen Web-Service sind das Versenden der Anfragenachricht und das Erhalten der Antwortnachricht entkoppelt. Beide Nachrichten werden über separate HTTP-Verbindungen gesendet. Damit kann die Bearbeitung der Anfrage länger dauern, ohne dass die Verbindung wegen eines Timeouts unterbrochen wird.

Asynchrone Web-Service sind daher insbesondere für langlaufende Services geeignet.

Im Folgenden wird der Kommunikationsablauf bei einem asynchronen Service-Aufruf skizziert. In dem Beispiel sind beide Kommunikationspartner über Technical Workflows implementiert. In der Praxis muss dies natürlich nicht der Fall sein.

Funktionsprinzip

Ein Workflow, der einen asynchronen Web-Service anfordert, wird bis zu einem Callback Listener abgearbeitet. Der Workflow des aufgerufenen Web-Service generiert währenddessen die Antwort. Ein Reply-Modul am Ende des aufgerufenen Workflows sendet die Antwort an den aufrufenden Workflow. Der Callback Listener im aufrufenden Workflow nimmt die Antwort entgegen und setzt den Workflow fort.

module guide 1228 2

WS Addressing

Voraussetzungen

  • Um einen asynchronen Web-Service mit einem beliebigen Web-Service-Client aufzurufen, muss der Client WS-Addressing unterstützen und eine nicht-anonyme Antwort-Adresse (wsa:ReplyTo) verwenden.

  • Ein asynchroner Web-Service, der eine nicht-anonyme Antwort-Adresse (wsa:ReplyTo) erwartet, muss über einen Medium Web Service Connector aufgerufen werden.

Asynchronen Web-Service anbieten

Ein Workflow, der einen asynchronen Web-Service anbieten soll, muss mindestens aus folgenden Modulen bestehen:

  • Asynchroner Web-Service Listener

  • XSLT Converter zum Erstellen der Antwort

  • Reply-Modul zum Senden der Antwort an den Callback Listener

Asynchronen Web-Service aufrufen

Ein Workflow, der einen asynchronen Web-Service anfordern soll, muss mindestens aus folgenden Modulen bestehen:

  • Modul zum Erstellen des Aufrufs, z.B. ein XSLT Converter oder das Variablen-Mapping

  • Asynchroner Web-Service Medium Connector zum Senden des Aufrufs

  • Web-Service Callback Listener zum asynchronen Entgegennehmen der vom aufgerufenen Web-Service gesendeten Antwort.

Zwischen dem aufrufenden Web Service Connector und dem Web-Service Callback Listener können Sie beliebige Module einfügen.

Die Module des aufrufenden und des aufgerufenen Web-Service müssen Sie in zwei verschiedenen Workflows anlegen.

Web-Service Provider durch Security Token Service absichern

Dieser Abschnitt erläutert, wie Sie einen Web-Service Provider über einen Security Token Service (STS) absichern.

Die Absicherung eines Web-Service Providers durch Security Token Service ist nur im Single-Modus möglich.

Voraussetzungen

  • Der Web-Service Provider, der gesichert werden soll, wurde mit der INUBIT-Software erstellt. Die URL des STS ist bekannt.

  • Folgende Daten liegen vor:

    • Keystore mit dem privaten Schlüssel des zu sichernden Web-Service.

    • Truststore mit dem öffentlichen Schlüssel des STS.

So gehen Sie vor

  1. Öffnen Sie den Web Service Connector zum Bearbeiten.

  2. Aktivieren Sie im Register Erweitert im Bereich W3C-Standards die Option WS-Security und klicken Sie auf den Button Einstellungen.

    Der Dialog WS-Security Konfiguration öffnet sich.

  3. Geben Sie im Bereich Service-Authentifizierung das Keystore-Passwort an und importieren Sie den Keystore.

  4. Wählen Sie im Bereich Consumer-Authentifizierung unter Security-Mechanismus die Option Security Token Service issued Token with service certificate (STS) aus.

  5. Geben Sie im Bereich Consumer-Authentifizierung im Feld STS Adresse die URL des STS an, der Ihren Web-Service absichern soll.

  6. Geben Sie an, wie die Kommunikation Ihres Web-Service Providers mit dem STS gesichert werden soll:

    Wählen Sie X.509 und importieren Sie den Truststore mit dem öffentlichen Schlüssel des STS.

  7. Klicken Sie auf Fertig stellen.

  8. Publizieren und aktivieren Sie das Modul und ggf. den enthaltenden Workflow.

In der WSDL-Security Policy des Web-Service Providers ist nun beschrieben, wie und an welchem STS Consumer sich authentifizieren müssen.

Falls noch nicht geschehen, registrieren Sie den Web-Service Provider am STS. Hinweise zum Registrieren an einem INUBIT-internen STS siehe Web Services Provider an STS Connector registrieren.

Schlüsselpaar für WS-Security erstellen

Verwendung

  • Absichern eines Web-Service-Providers ohne Security Token Service.

  • Authentifizierung eines Clients bei einem Web-Service-Provider ohne Security Token Service

    Die Authentifizierung erfolgt einmal pro Session über ein selbst oder extern signiertes Schlüsselpaar direkt am Webservice.

Selbstsigniertes Service-Schlüsselpaar erstellen

Verwendung

Zur Authentifizierung eines Clients an einem STS-gesicherten Web-Service

So gehen Sie vor

  1. Generieren Sie ein Schlüsselpaar mit der SubjectKeyIdentifier-Erweiterung.

    Setzen Sie dazu die Optionen gemäß Ihren Anforderungen:

    openssl req -x509 -days 9999 -nodes -newkey rsa:2048 -subj "/C=myCountry/ST=myState/L=myCity/O=myOrganization/OU=myDepartment/CN=myServerName" ‑keyout SecuredService.key -out SecuredService.crt -extensions v3_ca
  2. Konvertieren Sie das im Schritt 1 generierte Schlüsselpaar in das PKCS12-Format, um es in den Java-Keystore importieren zu können. Dabei müssen Sie ein Passwort vergeben.

    openssl pkcs12 -export -in SecuredService.crt -inkey SecuredService.key ‑out SecuredService.p12
  3. Importieren Sie die PKCS12-Datei in den Java-Keystore.

    keytool -importkeystore -srckeystore SecuredService.p12 ‑srcstoretype pkcs12 -srcalias 1 -srcstorepass INUBIT ‑destkeystore SecuredService.keystore.jks -destalias tomcat ‑`deststorepass <yourPassword>

STS-gesicherten Web-Service Provider aufrufen

Dieser Abschnitt erläutert, wie Sie einen Web-Service Consumer konfigurieren, damit dieser einen STS-gesicherten Web-Service Provider aufrufen kann.

Voraussetzungen

  • Sie benötigen einen Truststore mit dem öffentlichen Schlüssel des STS oder dessen Zertifikat.

  • Web-Service Provider, Web-Service Consumer und STS sind in der INUBIT-Software realisiert.

    Um mit einem externen Consumer einen Web-Service aufzurufen, der über einen STS der INUBIT-Software abgesichert ist, konfigurieren Sie dessen Sicherheitseinstellungen entsprechend den Angaben des Herstellers.

So gehen Sie vor

  1. Öffnen Sie den Web Service Connector Ihres Web-Service Consumers zum Bearbeiten.

  2. Geben Sie im Register Aufzurufender Service die URL an, unter der die WSDL des STS-gesicherten Web-Service Providers verfügbar ist:

    module guide 1230 1
  3. Laden Sie die WSDL.

  4. Klicken Sie im Register Erweitert im Bereich W3C Standards auf den Button WS-Security.
    Der Dialog WS-Security Konfiguration öffnet sich.

  5. Importieren Sie den Truststore des STS oder dessen Zertifikat. Der darin enthaltenen öffentliche Schlüssel des STS wird benötigt, um das vom STS signierte Token lesen zu können. Mit der Signatur versichert der STS, dass das Token vom STS selbst ausgestellt wurde.

    module guide 1231 0

    Nach dem erfolgreichen Import wird die Gültigkeit des Schlüssels angezeigt.

  6. Um die Kommunikation mit dem STS zu sichern, legen Sie im Bereich Consumer-Authentifizierung fest, wie Ihr Consumer sich gegenüber den STS authentifizieren soll.

    Der Consumer sendet diese Benutzer/Passwort-Kombination als Teil seines Security Token Requests an den STS.

    Darüber hinaus können Sie zur zusätzlichen Absicherung ein X.509-Keystore angeben. In diesem Fall müssen Sie das gültige Passwort und den Alias-Namen eines im Keystore enthaltenen Schlüsselpaares angeben.

  7. Klicken Sie auf Fertig stellen.

  8. Publizieren und aktivieren Sie den Workflow

Selbstsigniertes Schlüsselpaar erstellen

So gehen Sie vor

  1. Generieren Sie ein Schlüsselpaar mit der Erweiterung SubjectKeyIdentifier.

    Setzen Sie dazu die Optionen gemäß Ihren Anforderungen:

    openssl req -x509 -days 365 -nodes -newkey rsa:2048 -subj "/C=myCountry/ST=myState/L=myCity/O=myOrganization/OU=myDepartment/CN=myServerName" ‑keyout selfsigned.key -out selfsigned.crt -extensions v3_ca
  2. Konvertieren Sie das im Schritt 1 generierte Schlüsselpaar in das PKCS12-Format, um es in den Java-Keystore importieren zu können. Dabei müssen Sie ein Passwort vergeben.

    openssl pkcs12 -export -in selfsigned.crt `‑`inkey selfsigned.key `‑`out selfsigned.p12
  3. Importieren Sie die PKCS12-Datei in den Java-Keystore.

    keytool -importkeystore -srckeystore selfsigned.p12 -srcstoretype pkcs12 ‑srcalias 1 -srcstorepass INUBIT -destkeystore selfsigned.keystore.jks ‑destalias tomcat -deststorepass <yourPassword>
  4. Generieren Sie einen JKS-Truststore mit dem Service-Zertifikat. Als Passwort geben Sie das im Schritt 2 vergebene Passwort an.

    keytool -importcert -keystore selfsigned.truststore.jks -file selfsigned.crt -alias tomcat -storepass <yourPassword>

Extern signiertes Schlüsselpaar erstellen

So gehen Sie vor

  1. Generieren Sie einen Keystore mit einem automatisch generierten Zertifikat.

    Setzen Sie dazu die Optionen gemäß Ihren Anforderungen:

    keytool -genkey -keyalg RSA -dname "CN=myServerName, O=myCompany IS, C=de" -validity 999 -keystore private.keystore -keypass <yourPassword> ‑storepass <yourPassword> -alias tomcat
  2. Exportieren Sie die Zertifizierungsanforderung anhand des privaten Schlüssels.

    keytool -certreq -v -alias tomcat -keystore private.keystore -storepass <yourPassword> -file server_request.csr
  3. Übermitteln Sie die Zertifizierungsanforderung an eine von ihnen gewählte Zertifizierungsstelle (Certificate Authority/ CA), wie z.B. D‑Trust. Die Zertifizierungsstelle sendet ihnen ein signiertes Zertifikat für den Web-Service (hier CAcert.cer) und ihren eigenen öffentliches Schlüssel (hier public.cer) zurück.

  4. Listen Sie alle Informationen des Service-Zertifikats auf. Es müssen 509v3 und SubjectKeyIdentifier angezeigt werden.

    keytool -printcert -v -file public.cer
  5. Importieren Sie das CA-Zertifikat in den privaten Keystore.

    keytool -import -trustcacerts -alias cacert -file CAcert.crt -keystore private.keystore -storepass <yourPassword>
  6. Importieren Sie den öffentlichen Schlüssel in den privaten Keystore.

    keytool -import -trustcacerts -alias tomcat -file public.cer ‑keystore private.keystore -storepass <yourPassword>
  7. Generieren Sie den Truststore mit dem öffentlichen Schlüssel.

    keytool -import -alias tomcat -file public.cer -keystore public.keystore ‑storepass <yourPassword>
  8. Importieren Sie das CA-Zertifikat in den Truststore zur Überprüfung der Zertifikatskette (certificate chain check).

    keytool -import -alias cacert -file CAcert.crt -keystore public.keystore ‑storepass
    <yourPassword>

Schlüsselpaare für WS-Trust erstellen

WS-Trust Web-Service Security ist nur im Single-Modus möglich.

Verwendung

Absicherung meist mehrerer Web-Services durch einen Security Token Service (STS) über zwei Schlüsselpaare

  • Schlüssel zur Authentifizierung eines Clients am STS-Server

  • Schlüssel zur Authentifizierung eines Clients am Web-Service

Funktionsweise

Beim initialen Aufruf eines Web-Service authentifiziert sich der Client zuerst am STS.

Nach erfolgreicher Authentifizierung erhält der aufrufende Service den öffentlichen Schlüssel des Web-Service vom STS, wodurch der Zugriff auf dem Web-Service ermöglicht wird.

Die Authentifizierung am STS erfolgt mit WS-Secure-Conversation nur einmalig.

Um mit einer einmaligen Authentifizierung am STS den Zugriff auf mehrere Web-Services zu ermöglichen, müssen alle Webservices dieser Gruppe dasselbe Schlüsselpaar nutzen.

Selbstsigniertes Security-Token-Service-/STS-Schlüsselpaar erstellen

Verwendung

Zur Authentifizierung eines Clients an einem Security Token Service

So gehen Sie vor

  1. Generieren Sie ein Schlüsselpaar mit der SubjectKeyIdentifier-Erweiterung.

    Setzen Sie dazu die Optionen gemäß Ihren Anforderungen:

    openssl req -x509 -days 9999 -nodes -newkey rsa:2048 -subj "/C=myCountry/ST=myState/L=myCity/O=myOrganization/OU=myDepartment/CN=myServerName" ‑keyout STS.key -out STS.crt -extensions v3_ca
  2. Konvertieren Sie das im Schritt 1 generierte Schlüsselpaar in das PKCS12-Format, um es in den Java-Keystore importieren zu können. Dabei müssen Sie ein Passwort vergeben.

    openssl pkcs12 -export -in STS.crt -inkey STS.key -out STS.p12
  3. Importieren Sie die PKCS12-Datei in den Java-Keystore.

    keytool -importkeystore -srckeystore STS.p12 -srcstoretype pkcs12 ‑srcalias 1 - srcstorepass <yourPassword> -destkeystore STS.keystore.jks ‑destalias tomcat -deststorepass <yourPassword>
  4. Generieren Sie einen JKS-Truststore mit dem Service-Zertifikat. Als Passwort geben Sie das im Schritt 2 vergebene Passwort an.

    keytool -importcert -keystore STS.truststore.jks -file STS.crt ‑alias tomcat -storepass inubit

WS Correlation

Voraussetzungen

  • Wenn ein asynchroner Web-Service über ein CorrelationSet aufgerufen wird, muss der Web Service Connector oder der aufgerufene Web-Service eine Request-ID angeben. Diese Request-ID dient später dazu, den aufrufenden Prozess zu identifizieren, wenn die Antwort gesendet wird.

  • Nachdem die Antwort auf die Anfrage generiert wurde, muss der aufgerufene Web-Service die Request-ID zusammen mit der Antwort an den aufrufenden Workflow senden.

  • Der Call-Back-Listener muss die Request-ID verifizieren, um sicherzustellen, dass die Antwort dem Workflow mit der zugehörigen Request-ID zugeordnet ist.

  • Es ist ein CorrelationSet definiert, um die Request-ID zu setzen und zu verifizieren.

CorrelationSets konfigurieren

Verwendung

Zum Erstellen, Konfigurieren oder Löschen von CorrelationSets

Voraussetzungen

Auf der Registerseite WSDLs des Panels Web Services haben Sie eine WSDL-Datei dem Web Service Connector zugewiesen, siehe WSDL-Datei zuweisen.

So gehen Sie vor

  1. Öffnen Sie den Workflow, der den Web Service Connector enthält, für den Sie das CorrelationSet konfigurieren wollen, zum Bearbeiten.

  2. Öffnen Sie das Panel Web Services im Fenster rechts.

    → Der Dialog Web Services öffnet sich.

  3. Öffnen Sie die Registerseite CorrelationSets.

    module guide 1234 0
  4. Erstellen Sie eine neue Property durch Klicken auf das Neu-Icon module guide 1234 1 im Bereich Properties.

    → Der Dialog Property bearbeiten/hinzufügen erscheint.

    module guide 1234 2
  5. Geben Sie den Namen der Property ein. Lassen Sie die Werte in den Feldern Typ und Ablegen in WSDL unverändert.

  6. Klicken Sie auf OK, um die Änderungen zu speichern.

  7. Fügen Sie ein CorrelationSet hinzu.

    module guide 1235 0
  8. Wählen Sie eine Property und klicken Sie auf das Plus-Icon, um sie dem CorrelationSet hinzuzufügen.

  9. Erstellen Sie einen neuen Property-Alias durch Klicken auf das Neu-Icon module guide 1234 1 im Bereich PropertyAliases.

    → Der Dialog PropertyAlias bearbeiten/hinzufügen erscheint.

    module guide 1235 2
  10. Navigieren Sie zu dem gewünschten Nachrichtenteil.

    → Der XPath wird automatisch generiert.

  11. Klicken Sie auf OK.

WSDL-Datei zuweisen

Verwendung

Zum Zuweisen einer WSDL-Datei zu einem Web Service Connector

Voraussetzungen

Sie haben Zugriff auf die WSDL-Datei des gewünschten Web-Service.

So gehen Sie vor

  1. Öffnen Sie den Workflow, der den Web Service Connector enthält, für den Sie das CorrelationSet konfigurieren wollen, zum Bearbeiten.

  2. Öffnen Sie das Panel Web Services rechts im Fenster.

  3. Öffnen Sie die Registerseite WSDLs.

    → Der Dialog WSDLs erscheint.

  4. Klicken Sie auf das Öffnen-Icon module guide 1222 0 und öffnen Sie eine gültige WDSL-Datei.

    module guide 1236 2

    → Die WDSL-Datei ist geladen und kann zum Konfigurierende eines CorrelationSets genutzt werden.