AEP.API Address Service Dokumentation

Features & Nutzung

Der AEP api-address-service erfüllt die die Aufgabe zur Administration der API-Webservice Adressen:

  • eigene API-Adressen verwalten:
    • REST API um die eigenen Adressen dem verwendeten API-Verzeichnisdienst zu übermitteln (und über diesem im Markt zu veröffentlichen)
  • Marktpartner API-Adressen verwalten:
    • Pflege der API-Verzeichnisdienst-Adressen der Marktpartner nach Zertifikats-Import
    • Abfrage der API-Endpunktadressen (je MPID, API-Kennung und Version) an den API-Verzeichnisdiensten der Marktpartner
    • Automatische Pflege der API-Adressen der Marktpartner: Ist die angefragte API-Adresse noch nicht lokal gespeichert oder wurde seit mindestens 24h (Default-Konfiguration) nicht mehr am Verzeichnisdienst abgefragt, dann wird diese erneut am Verzeichnisdienst angefragt und bei Änderungen lokal gespeichert.
    • REST API um die API-Endpunktadressen der Marktpartner anzufragen
  • Automatisierte Auslöser für das Herunterladen von API-Zertifikaten
    • Der Zertifikatsdownload wird automatisch ausgelöst, wenn der entsprechende Partner (identifiziert durch providerId) nicht in der Datenbank vorhanden ist

Hardware Anforderungen

Eine Service-Instanz erfordert mindestens 512 MB RAM.

Wir empfehlen 0,4 CPU-Kerne je Instanz.

Logs werden auf die Festplatte geschrieben, entsprechend muss genügend Speicherplatz vorhanden sein.

Abhängigkeiten

Der Service greift auf einen Message-Broker zu, um Nachrichten zu empfangen und zu versenden.

Der Service nutzt die REST API des Security Server FSS. Der FSS muss im Hintergrund auf ein HSM zugreifen können.

Dieser Dienst stellt auch eine Verbindung zu den API-Verzeichnisdiensten der Marktpartner her, um die API-Adressen der API-Webservices der Marktpartner abzurufen.

Erforderliche Konfiguration (in den application.properties)

Konfiguration der RabbitMQ

Message-Broker einrichten

rabbitmq.host=localhost
rabbitmq.port=5672
rabbitmq.username=guest
rabbitmq.password=guest

Sie können sich auch für den Service-Bus von Azure entscheiden, dafür brauchen Sie eine vorhandene Infrastruktur. Um Service-bus zu aktivieren müssen Sie folgende Eigenschaften setzen:

spring.profiles.active=servicebus
spring.cloud.azure.servicebus.connection-string=<Your-Connection-String>
spring.cloud.azure.servicebus.namespace=<Your-Namespace>

Konfiguration des FSS (für Anfragen an den Verzeichnisdiensten)

Legen Sie die URL für den FSS-Service fest

fss-url=http://fss:2223/fss/api/v1/
fss-page-size-value=100
shared-client=api.shared-client

Optionale Konfigurationen (in den application.properties)

Client-Authentifizierung

Wenn Ihr FSS im sicheren Modus (durch Authentifizierung geschützt) ausgeführt wird, können Sie den Client so konfigurieren, dass er im API-Aufruf Token sendet. Konfigurieren Sie die folgenden Eigenschaften, um die Authentifizierungseigenschaften zu aktivieren und einzurichten.

Hinweis: Konfigurieren Sie in Keycloak einen neuen Client mit dem Namen api-service und aktivieren Sie Client Authentication.

fss.secured-rest-client=false
client.issuer-uri=https://<domain>/auth/realms/<realm>/protocol/openid-connect/token
client.id=api-service
client.client-secret=*****
client.scope=openid
client.user-name=
client.password=

Über diese Eigenschaft können Sie das Verbindungszeitlimit für Anrufe zu anderen Diensten wie FSS und Adressdienst ändern:

web-client.connection-timeout-millis=10000

Experte: Thread Handling von Anfrage-Prozessen

Mit diesen Attributen können Sie steuern, wie die synchrone Verarbeitung von Threads von Anfrage-Prozessen am API-Verzeichnisdienst gehandhabt wird. Dabei bleiben Threads eingehender Anfrage-Prozesse so lange geöffnet, bis der entsprechende Prozess alle Schritte und Queues durchlaufen und vollständig verarbeitet wurde.

shared-thread.connection-timeout=60
shared-thread.is-throw-exception-if-no-thread-is-found=false

Nur für Test-Systeme: Deaktivierung von mTLS in der api-address-service -> Verzeichnisdienst Kommunikation

Die verschlüsselte Verbindung mit mTLS zwischen Client und Server ist standardmäßig aktiviert und kann mit dieser Eigenschaft deaktiviert werden.

tls-enabled=false

Konfiguration für Anfrage an den Verzeichnisdiensten

Konfiguration der Anbindung des directory-service (url ist nur vorübergehend vorhanden und wird durch automatische Verwaltung aus dem Zertifikat-Download Prozess ersetzt).

directory-service.url = http://localhost:8443/aep-api-directory-service
directory-service.connect-timeout = 10s
directory-service.read-timeout = 30s
shared-thread.connection-timeout = 60s

connect-timeout und read-timeout legen die Timeouts des HTTP - Aufrufs fest. connection-timeout begrenzt den gesamten Aufruf des Address Service inclusive der Verarbeitung in den Queues.

Maximales Alter von lokalen API-URLs (für eine erneute Abfrage am Verzeichnisdienst)

Festlegen des maximalen Alters (Standard 24 Stunden) für lokale API-Datensätze, bevor eine Aktualisierungsanforderung vom Verzeichnisdienst ausgelöst wird

api-record.max-age=24h

Message Broker Detailkonfigurationen

Die folgende Konfiguration besteht darin, die Austauschnamen und die maximale Parallelität für jede Warteschlange festzulegen. Nachfolgend finden Sie alle Standardwerte.

#----------------------------------directoryService Sign Queue Config--------------------------------------------
directoryServiceSignRequestExchangeName=api.directoryService.request.sign
#consumer
spring.cloud.stream.bindings.directoryServiceSignRequestConsumer-in-0.destination=${directoryServiceSignRequestExchangeName}
spring.cloud.stream.bindings.directoryServiceSignRequestConsumer-in-0.group=default
spring.cloud.stream.rabbit.bindings.directoryServiceSignRequestConsumer-in-0.consumer.max-concurrency=50
#producer
spring.cloud.stream.bindings.directoryServiceSignRequestProducer-out-0.destination=${directoryServiceSignRequestExchangeName}
#----------------------------------directoryService Send Queue Config--------------------------------------------
directoryServiceSendRequestExchangeName=api.directoryService.request.send
#consumer
spring.cloud.stream.bindings.directoryServiceSendRequestConsumer-in-0.destination=${directoryServiceSendRequestExchangeName}
spring.cloud.stream.bindings.directoryServiceSendRequestConsumer-in-0.group=default
spring.cloud.stream.rabbit.bindings.directoryServiceSendRequestConsumer-in-0.consumer.max-concurrency=50
#producer
spring.cloud.stream.bindings.directoryServiceSendRequestProducer-out-0.destination=${directoryServiceSendRequestExchangeName}
#----------------------------------certificateDownload Command Queue Config--------------------------------------------
certificateDownloadCommandExchangeName=certificate.download.command
#producer
spring.cloud.stream.rabbit.bindings.certificateDownloadCommandProducer-out-0.producer.exchange-type=topic
spring.cloud.stream.bindings.certificateDownloadCommandProducer-out-0.destination=${certificateDownloadCommandExchangeName}
#----------------------------------------------------------------------------------------------------------------
View Me   Edit Me