Spezifikation Bidirektionale Kommunikation in FIT-Connect
Warum machen wir das?
Als empfangendes System möchte ich dem sendenden System einer initialen Submission über FIT-Connect eine Antwort schicken können, um Rückfragen, Prozessanweisungen oder Bescheide im Rahmen des Verwaltungsverfahren zu übermitteln. Dafür möchte ich einen einfach zu implementierenden Adressierungsmechanismus angeboten bekommen, der auch für langlaufende Verwaltungsverfahren zuverlässig nutzbar ist, weil dieser Adressierungsmechanismus auch mit Änderungen der Adressparameter umgehen kann.
Ich möchte als empfangendes Systemen vor einer initialen Submission allen potentiellen Kommunikationspartnern mitteilen, nach welchem Prozessstandard ich bereit bin, in einem Verwaltungsverfahren bilateral zu kommunizieren, damit die technisch Voraussetzungen und Pflichten bei einem sendenden System vor der Entscheidung des Nutzers für einen FIT-Connect basierten Rückkanal bekannt sind.
Als sendendes System möchte ich für meinen Nutzer eine Ende zu Ende Kommunikation bis zum Bescheid für meinen Nutzer anbieten können. Ich möchte eine Auswahl anbieten können, ob der Rückkanal über FIT-Connect genutzt wird und der empfangenden Seite mitteilen, nach welchem der Prozesstandards, die die empfangende Seite unterstützt, erfolgt.
Als sendendes System möchte ich meine Kommunikationsparameter für die Rückantwort einheitlich anpassen können, falls sich Änderungen im Zeitverlauf ergeben.
Relevante Links und Bemerkungen
- Hinweis aus Event Schema Bug Ticket: Für neue Events die Schema Version hochziehen
Funktionale Anforderungen
-
Für die bilaterale Verfahrenskommunikation soll der Verfahrensbetreiber in der Destination hinterlegen können, ob er eine Verfahrenskommunikation über FIT-Connect unterstützt und muss im Falle einer Unterstützung zwingend angeben, nach dem welchem Prozessstandard die Datenformate der Nachrichten aufgebaut sein müssen. -
Die Referenz auf den Prozessstandard unterscheidet sich von der bisherigen Schemarefenz dadurch, dass kein einzelnes Schema einer Nachricht / eines Antrags referenziert wird, sondern ein kompletter Standard bestehend aus mehreren Nachrichtenschemata wie bspw. XBAU. Auch diese Referenz soll über eine URI erfolgen (bspw. urn:xoev-de:bmk:standard:xbau_2.3 oder https://schema.fitko.de/processstandardxyz_1-0).
-
-
Verfahrensbetreiber, die keine hoheitlichen Aufgaben wahrnehmen und daher keine Anträge oder Berichte von Bürgern/Unternehmen empfangen.-> https://git.fitko.de/fit-connect/planning/-/issues/938-
Für die Produktionsumgebung soll es hier möglich sein, Zertifikate anderer vertrauenswürdiger Public-Key-Infrastrukturen als der Verwaltungs-PKI zu hinterlegen. -
Die ID dieses Destination Äquivalents kann als Rückkanalinformation an das empfangende System übermittelt werden, damit das empfangende System Informationen für die Rückantwort ermitteln kann.
-
-
Alle Übermittlungen in der bilateralen Case Kommunikation sollen über einen Security Event Log geloggt werden. -
Alle Signaturen müssen zuverlässig überprüfbar sein
-
-
Ob die weitere Kommunikation über die Case-ID (als Nachrichtenthread) oder die jeweilige ID des Kommunikationspartner erfolgt, ist in der Spezifikation zu entscheiden. Folgende Anforderungen sind hierbei zu betrachten: -
Es sollte sichergestellt werden, dass nur berechtigte Systeme einen Zugriff auf die Nachricht erhalten -
Es sollte verhindert werden, dass zu einer Situation kommt, bei dem kein Zugriff mehr auf die Nachrichten möglich ist -
Wechsel der Zugriffberechtigung beim Nachrichtenzugriff, sollte zumindest perspektivisch abbildbar sein -
Zugriff soll mit standardisierten OAuth Methoden abbildbar sein
-
-
Eine Ende-zu-Ende Verschlüsselung mit dem Antragssteller (Unternehmen und natürliche Personen), sollte konzeptionell in der ersten oder in weiteren Umsetzungsstufen möglich sein
- Hinweis aus Event Schema Bug Ticket: Für neue Events die Schema Version hochziehen
Aufgaben
API
-
Bei Open einen Timer für automatische Schließung durch Zustelldienst. -
Bei Zeitraum X vor Schließung zusätzlich ein Callback. -> "CaseClosureAnnouncement" ~~~~~~~~~~~~https://preview.docs.fitko.dev/submission-api/bilateral-communication/#post-/v1/submissions -
Open (PATCH /v1/cases/{caseId} mit caseState=active) verlängert Schließungszeit um den Standardzeitraum.Response mit neuem Zeitwert fehlt noch.-> ~~~~~~~~~~~~https://preview.docs.fitko.dev/submission-api/bilateral-communication/#patch-/v1/cases/-caseId-
-
approveForClosure reduziert zeitraum bis zur schließung auf Y Tage (Y<X) -> Response Body anpassen (neue Zeit oder Close) -
Offen: Anstehende Schließung über Callback oder Event -
GET Cases Endpunkt für Auflistung der aktivenaller Cases (Anmerkung: Taucht aber irgendwie nicht im Preview auf) -
Submission-ID/Reply-IDs Array im GET Case -
Http Fehler in allen Endpunkten ergänzen -
Problem Details ergänzen -
Examples überall ergänzen (TODO: Sicherstellen, dass bidirectional-flag / case-status Events entfernt) -
Callbacks gemäß Sequenzdiagramm (TODO: Sicherstellen, dass bidirectional-flag / case-status Events entfernt) -
Bei Callbacks für angelegte Destinations gibt es einen Callback, der über das baldige Erreichen der closeTime informiert -
Bei Callbacks für eine Submissions wird ein Callback definiert, der über das baldige Erreichen der closeTime informiert. Anforderung: Bei multiplen Submissions im Rahmen eines Cases sollte es nicht zur mehrfachen Versenden dieses Callbacks kommen. (Anmerkung: Submissions sind zeitlich unabhängig voneinander und sollten auch einen eigenen Lifecycle haben mit entsprechenden zeitlich gestaffelten Events)
-
-
Alle Descriptions der neuen Endpunkte prüfen und ggf. finalisieren -
Doku: Sender-Callback hängt am Case und wird mit jeder neuen Submission überschrieben. D.h. der Callback der letzten Submission zählt. Fehlt der Callback in der Submission wird dieser aus dem Case entfernt.
Events:
-
Spiegelevents für Reply -
Freigabe zur Vorgangsschließung -
Vorgang geschlossen
Diskussionspunkte
- Muss der Sender dem Zustelldienst ankündigen, ob die Kommunikation bidirektional ist?
- ->
JA:POST /v1/submssions
{ ..., "bidirectional": "true" }
- -> NEIN: Bidirektionale Kommunikation ist ausschließlich ein Protokoll zwischen Sender und Subscriber (Reply-Channel ist dann
FIT-Connect
)
- ->
IstencryptedMetadata
absichtlich optional? ~~~~~~~~~~~~https://preview.docs.fitko.dev/submission-api/bilateral-communication/#get-/v1/replies/-replyId-Beim Reject mussproblems
required sein. ~~~~~~~~~~~~https://preview.docs.fitko.dev/submission-api/bilateral-communication/#put-/v1/replies/-replyId-/rejectWozu dieses "Schließen vormerken"? Wenn eine Seite nicht mehr will macht sie den Case einfach zu.-
(Anmerkung: Cases haben keinen Zustand und werden nicht geschlossen)finalClosure
könnte einstring
mit Formatdate-time
sein. Oder erklären, dass ein UNIX timestamp verwendet wird. - "GET Cases Endpunkt":
- Sender: Wir haben keine Ownership im Zustelldienst. Auch der OAuth-Server weiß nichts über Cases. Die einzige Absicherung zum Zugriff auf Cases ist, die UUID zu kennen.
- Zugriff auf Replies und Zuordnung von Cases / Replies basiert auf der
Client-IDdem Subject des Senders
- Zugriff auf Replies und Zuordnung von Cases / Replies basiert auf der
- Subscriber: Das ginge:
- Wir nehmen alle Destinations aus dem Token,
- suchen dazu alle Submissions (auch beendete) und
- erhalten eine Liste aller Cases.
- -> Cases werden im Zustelldienst der
Client-IDdem Subject des Senders zugeordnet.
- Sender: Wir haben keine Ownership im Zustelldienst. Auch der OAuth-Server weiß nichts über Cases. Die einzige Absicherung zum Zugriff auf Cases ist, die UUID zu kennen.
- Wird es ein
forward-reply
Event geben? Z.B. wenn das Antragssystem die Antwort an ein Servicekonto weiter gibt.- Falls ja, muss ein entsprechender REST-Endpunkt geschaffen werden.
- -> NEIN
Ablauf
Überarbeitetes Diagramm:
%% You may edit this on https://mermaid.live
sequenceDiagram
autonumber
participant OS as Onlineservice
participant FC as FIT-Connect
participant FV as Fachverfahren
loop Nutzung des bidirektionalen Kommunikation
%% Prüfung, ob Fachverfahren den Rückkanal FIT-Connect unterstützt
OS ->> FV: Zustellpunkt (Destination) abrufen
FV -->> OS: Zustellpunktdetails mit Rückkanaloptionen
%% Vorgangsspezifischen Schlüssel erzeugen
opt Falls Rückkanal genutzt wird soll und noch kein Schlüsselpaar vorhanden
OS ->> OS: Generiere Schlüsselpaar (pro Vorgang / Antragsteller:in) für Antworten vom Fachverfahren
end
%% Submission mit Rückkanaloption FIT-Connect
OS ->> OS: Metadatensatz mit öffentlichem Schlüssel des oben generierten Schlüsselpaars und Prozesstandards generieren
OS ->> OS: Einreichung (Submission) mit öffentlichem Schlüssel des Zustellpunktes verschlüsseln
alt Falls ein neuer Vorgang (Case) angelegt wird
OS ->> FC: Einreichung mit Rückkanaloption FIT-Connect anlegen
FC ->> FC: Vorgang anlegen mit initialer Einreichung anlegen
else Falls ein bestehender Vorgang genutzt wird
OS ->> FC: Einreichung an bestehenden Vorgang anfügen
end
OS ->> FC: Einreichung verschicken
%% Submission verarbeiten
FV ->> FC: Einreichung abrufen
FV ->> FV: Ereignis (Security Event Token) für Accept / Reject generieren
FV ->> FC: Ereignis mit Accept / Reject verschicken
%% Reply
FV ->> FV: Antwort (Reply) mit öffentlichem Schlüssel aus dem Metadatenschema verschlüsseln
FV ->> FC: Antwort anlegen und verschicken
%% Reply verarbeiten
FC ->> OS: Antwort abrufen
OS ->> FC: Antwort akzeptieren (Accept) oder zurückweisen (Reject)
FC ->> FC: Ereignis (Security Event Token) für Accept / Reject generieren
end
Altes Diagramm:
sequenceDiagram
autonumber
loop Bidirektionale Kommunikation
opt Falls noch kein Key vorhanden
Sender->>Sender: Pro Vorgang (bzw. pro Antragsteller:in) einen Encryption Key für Rückkanal generieren
end
Sender->>Sender: Metadatensatz mit Encryption Key und Angabe zum Prozesstandard generieren
Sender->>Sender: Submission Bestandteile mit dem Public Key der Destination verschlüsseln
alt Falls ein neuer Case angelegt wird
Sender->>Zustelldienst: Submission mit Rückkanaloption anlegen
Zustelldienst->>Zustelldienst: Bidirektionalen Vorgang anlegen
else Falls ein bestehender Case genutzt wird
Sender->>Zustelldienst: Submission für ein bestehenden Case anlegen
end
Sender->>Zustelldienst: Submission übersenden
Zustelldienst->>Subscriber: Einreichung abrufen
Subscriber->>Subscriber: Security Event Token für Accept / Rejectgenerieren
Subscriber->>Zustelldienst: Security Event Token übermitteln
Subscriber->>Subscriber: Prozessstandard und Encryption Key aus dem Metadatenschema entnehmen
Subscriber->>Subscriber: Reply Bestandteile mit dem Encryption Key verschlüsseln
Subscriber->>Zustelldienst: Reply anlegen und übersenden
Zustelldienst->>Sender: Reply abrufen
Sender->>Zustelldienst: Accept oder Reject senden
Zustelldienst->>Zustelldienst: Security Event Token für Accept / Reject generieren
end
opt Wenn der Zeitraum X bis zur closeTime des Cases erreicht wurde
par Subscriber über anstehende Schließung per Callback informieren
Zustelldienst->>Subscriber: Callback mit Closetime
and Sender über anstehende Schließung per Callback informieren
Zustelldienst->>Sender: Callback mit Closetime
end
alt Falls der Case noch genutzt wird
Subscriber->>Zustelldienst: Mit Patch Case (Open) die Closetime zurücksetzen
else closeTime für den Case wird erreicht
Zustelldienst->>Zustelldienst: Vorgangsschließung durchführen
Zustelldienst->>Zustelldienst: Security Event Token (Close-case) für die Schließung generieren
par Subscriber über neues Ereignis informieren
Zustelldienst->>Subscriber: Ereignis Callback
and Sender über neues Ereignis informieren
Zustelldienst->>Sender: Ereignis Callback
end
end
end
Subscriber->>Zustelldienst: Mit Patch Case (Close) die Vorgangsschließung anweisen
Zustelldienst->>Zustelldienst: Vorgangsschließung durchführen
Zustelldienst->>Zustelldienst: Security Event Token (Close-case) für die Schließung generieren
par Subscriber über neues Ereignis informieren
Zustelldienst->>Subscriber: Ereignis Callback
and Sender über neues Ereignis informieren
Zustelldienst->>Sender: Ereignis Callback
end
-
Neue Spec-Version ist finalisiert -
Alle neuen Events sind hier dokumentiert: https://git.fitko.de/fit-connect/konzepte/-/blob/main/Event_Log.md
Durchführungsplan
-
Spec-Entwurf erstellen (Due: 03.12) -
Spec abstimmen
Potentielle API Änderungsbedarfe:
- Services sind in der Destination optional, damit auch eine Destination für Prozesskommunikation genutzt werden kann
- Fähigkeit zur bilateralen Case Kommunikation in der Destination deklarieren und Prozessstandards hinterlegen
- Case-ID Angabe in der Submissionanlage muss wirksam sein
- Case Event Log muss die dazugehörigen Submissions loggen
- Case-ID darf nicht überschrieben werden
- Destinations ohne Services im Produktivkontext brauchen keine Zertifikate mit Verwaltungs-PKI
- Alternative wären bspw. Elster Zertifikate oder Zertifikate aus der Liste der EIDAS Siegel Anbieter zulässig (https://ec.europa.eu/cefdigital/wiki/display/CEFDIGITAL/Digital+Signature+Service+-++DSS#DigitalSignatureServiceDSS-Documentation)
- In der Dokumentation und in den Self-Service-Portal sollte hingewiesen werden, dass der Name (der Organisation) im Zertifikat dem Namen des Self-Service-Accounts entsprechend muss
- In den Metadaten im Rückkanalobjekt für die FIT-Connect Option oder in der der API soll die Destination-ID für die Rückantwortnachricht hinterlegt werden können