From 1ced5507180cb7375c089453176f91185caffccf Mon Sep 17 00:00:00 2001 From: Alexander Hoose <alexander.hoose@fitko.de> Date: Tue, 3 Aug 2021 20:13:37 +0000 Subject: [PATCH] Aktualisieren docs/getting-started/sending/start-submission.mdx, docs/getting-started/sending/encrypt.mdx, docs/getting-started/sending/data.mdx, docs/getting-started/sending/attachments.mdx, docs/getting-started/sending/metadata.mdx, docs/getting-started/sending/query-status.mdx, docs/getting-started/sending/submit.mdx, docs/getting-started/sending/overview.mdx Dateien --- docs/getting-started/sending/attachments.mdx | 2 +- docs/getting-started/sending/data.mdx | 2 +- docs/getting-started/sending/encrypt.mdx | 2 +- docs/getting-started/sending/metadata.mdx | 2 +- docs/getting-started/sending/overview.mdx | 150 +----------------- docs/getting-started/sending/query-status.mdx | 2 +- .../sending/start-submission.mdx | 149 +++++++++++++++++ docs/getting-started/sending/submit.mdx | 2 +- 8 files changed, 159 insertions(+), 152 deletions(-) diff --git a/docs/getting-started/sending/attachments.mdx b/docs/getting-started/sending/attachments.mdx index 7f03d427c..94b14dd28 100644 --- a/docs/getting-started/sending/attachments.mdx +++ b/docs/getting-started/sending/attachments.mdx @@ -1,6 +1,6 @@ --- title: Anlagen -sidebar_position: 3 +sidebar_position: 4 --- import Tabs from '@theme/Tabs' diff --git a/docs/getting-started/sending/data.mdx b/docs/getting-started/sending/data.mdx index 88b8cde10..7751db6db 100644 --- a/docs/getting-started/sending/data.mdx +++ b/docs/getting-started/sending/data.mdx @@ -1,6 +1,6 @@ --- title: 🚧 Fachdaten -sidebar_position: 4 +sidebar_position: 5 --- :::caution diff --git a/docs/getting-started/sending/encrypt.mdx b/docs/getting-started/sending/encrypt.mdx index 457ef9ebc..888a340d2 100644 --- a/docs/getting-started/sending/encrypt.mdx +++ b/docs/getting-started/sending/encrypt.mdx @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +sidebar_position: 3 title: Verschlüsseln --- diff --git a/docs/getting-started/sending/metadata.mdx b/docs/getting-started/sending/metadata.mdx index a6288fecc..b835cdad0 100644 --- a/docs/getting-started/sending/metadata.mdx +++ b/docs/getting-started/sending/metadata.mdx @@ -1,6 +1,6 @@ --- title: Metadatensatz -sidebar_position: 5 +sidebar_position: 6 --- Die Antragsmetadaten beschreiben die Struktur der Einreichung und dessen Inhalte, wie beispielsweise Anhänge oder die diff --git a/docs/getting-started/sending/overview.mdx b/docs/getting-started/sending/overview.mdx index 375802185..e52e2f7f5 100644 --- a/docs/getting-started/sending/overview.mdx +++ b/docs/getting-started/sending/overview.mdx @@ -11,6 +11,10 @@ Bei einer Einreichung z. B. eines Antrags reicht ein Onlineservice im Namen und Hierfür benötigt der Onlinedienst die öffentlich verfügbaren Informationen eines Zustellpunktes, wie beispielsweise die Zustellpunkt-Id (`destinationId`) oder den JWK des Zustellpunktes. Wie man an diese Informationen gelangt ist im [Folgenden](#get-destination-infos) genauer beschrieben. +:::caution +Wie der Zustellpunkt der zuständigen empfangenden Stelle technisch ermittelt wird, wird aktuell noch nicht beschrieben. Die Ermittelung wird zukünftig über die Routing API ermöglicht, die sich aktuell noch in der Konzeption und Umsetzung (voraussicht bis Ende Q3 2021) befindet. Sobald Routing API spezifiziert ist und technisch bereitsteht, wird die Ermittlung des korrekten Zustellpunkt über die Routing API hier beschrieben. Bis dahin wird davon ausgegangen, dass der Zustellpunkt bzw. deren `destinationId` über einem bilateralen Mechanismus in Erfahrung gebracht wird. +::: + FIT-Connect möchte einen sehr sicheren Übermittlungsweg bereitstellen, weswegen alle Daten immer vom Browser des Users bis in die Behörde Ende-zu-Ende-Verschlüsselt übertragen werden müssen. Das dafür benötigte Schlüsselmaterial wird auch über die FIT-Connect-API bereitgestellt und der Umgang damit im Weiteren erklärt. @@ -31,149 +35,3 @@ sequenceDiagram; C->>F: Fachdaten & Metadaten hochladen und Einreichung absenden; </Mermaid> - -## Informationen des Zustellpunktes erhalten {#get-destination-infos} - -Um an einen Zustellpunkt eine Einreichung zu übermitteln ist es notwendig dessen öffentlichen Informationen zu haben. Dazu gehören seine Id, die unterstützten Schemas und -der öffentliche Schlüssel, der zur Verschlüsselung der Daten genutzt werden soll. - -<Tabs - defaultValue="curl" - values={[ - { label: 'curl', value: 'curl', }, - { label: 'Self-Service-Portal', value: 'ssp', }, - ] - }> -<TabItem value="curl"> - -Über `curl` können diese Information mit dem Folgenden Aufruf erhalten werden. - -```bash -$ export SERVICE_URL=... -$ export JWT_TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJJc3N1Z...NL-MKFrDGvn9TvkA -$ export DESTINATION_ID=7a2668ad-3081-407c-9358-7ce4b6144b02 -$ curl \ - -H "Authentication: Bearer $JWT_TOKEN" \ - -H "Content-Type: application/json" \ - -X GET $SERVICE_URL/destinations/$DESTINATION_ID - -> { - "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047", - "schemas": [ - { - "schemaURI": "urn:xoev-de:xfall:standard:fim-s00000000009_1.0.0", - "mimeType": "application/xml" - } - ], - "encryptionKid": "c66e4423-e28d-4a1f-911d-818f9ab60221", - "publicKeys": { - "keys": [{ - "kty": "RSA", - "key_ops": [ - "wrapKey" - ], - "alg": "RSA-OAEP-256", - "x5c": [ - "...(base64 encoded cert)...", - "...(base64 encoded intermediate cert)...", - "...(base64 encoded root cert)..." - ], - "kid": "c66e4423-e28d-4a1f-911d-818f9ab60221", - "n": "hGALqq-nbAymF5M...puHAyo3-iMf3UaBsPj0s", - "e": "AQAB" - }] - } - } -``` - -</TabItem> -<TabItem value="ssp"> - -:::caution -Das Self-Service-Portal befindet sich noch in der Konzeption und ist daher noch nicht dokumentiert. -::: - -</TabItem> -</Tabs> - -## Eine neue Einreichung beginnen - -Das Beginnen einer neuen Einreichung über die API erfordert den Versand einer [HTTP POST Nachricht](../../apis/delivery-service.mdx#post-/submissions), die definiert, an welchen Zustellpunkt der Einreichung versendet werden soll und welche Inhalte übermittelt werden sollen. -Die Inhalte umfassen hierbei die Identifikatoren der Anhänge als UUIDs und die Information, ob Fachdaten mit versendet werden oder nicht. - -<Tabs - defaultValue="curl" - values={[ - { label: 'curl', value: 'curl', }, - { label: 'Java (Spring)', value: 'java', }, - { label: 'JavaScript', value: 'js', }, - { label: 'C#', value: 'csharp', }, - ] -}> -<TabItem value="curl"> - -```bash -$ export SERVICE_URL=... -$ export JWT_TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJJc3N1Z...NL-MKFrDGvn9TvkA -$ export DESTINATION_ID=7a2668ad-3081-407c-9358-7ce4b6144b02 -$ curl \ - -H "Authentication: Bearer $JWT_TOKEN" \ - -H "Content-Type: application/json" \ - --data "{ \"destinationId\": \"$DESTINATION_ID\", \"\" { \"data\": false, \"attachments\": [] } }" \ - -X POST $SERVICE_URL/submissions - -> { - "destinationId": "7a2668ad-3081-407c-9358-7ce4b6144b02", - "submissionId": "9d618546-0ff7-4e93-9f15-714e5dd1bf12" -} -``` - -</TabItem> -<TabItem value="java"> - -```java -// TBD -``` - -</TabItem> -<TabItem value="js"> - -```js -import axios from 'axios' - -const url = '/submissions' -const data = { - destinationId: 'a1270669-ea36-4a0c-8f8f-c9d490e7f2bc', - announcedContentStructure: { - data: true, - attachments: [ - '1da99641-2067-4e8b-b049-91b2a6c90544', - '538a1365-092e-4d80-93b9-90eb8c1f5982' - ] - } -} -const token = 'eyJhbGciOiJIUzI1NiJ9.eyJyYW5kb20iOiJyYW5kb20ifQ.lXckRWoWCUBGM4ACZ6wIhYqplJeSw0HMEfE91jD1JPU' - -axios.post( - url, - data - { - baseURL, - timeout: 2000, - headers: { - 'Authentication': `Bearer ${token}` - } - } -) -``` - -</TabItem> -<TabItem value="csharp"> - -```chsarp -TBD -``` - -</TabItem> -</Tabs> - diff --git a/docs/getting-started/sending/query-status.mdx b/docs/getting-started/sending/query-status.mdx index 57f292a43..2b9519e23 100644 --- a/docs/getting-started/sending/query-status.mdx +++ b/docs/getting-started/sending/query-status.mdx @@ -1,6 +1,6 @@ --- title: 🚧 Status abfragen -sidebar_position: 7 +sidebar_position: 8 --- import Mermaid from '@site/src/components/Mermaid' diff --git a/docs/getting-started/sending/start-submission.mdx b/docs/getting-started/sending/start-submission.mdx index 8b1378917..ee1aa28f8 100644 --- a/docs/getting-started/sending/start-submission.mdx +++ b/docs/getting-started/sending/start-submission.mdx @@ -1 +1,150 @@ +--- +sidebar_position: 2 +title: Überblick +--- +import Tabs from '@theme/Tabs' +import TabItem from '@theme/TabItem' + +## Zustellpunkt und destinationId ermitteln + +Um eine Einreichung an die fachlich korrekte Stelle sicherzustellen und die technischen Parameter des richtigen Zustellpunkt zu ermitteln, muss die `destinationId` der zuständigen Stelle ermittelt werden. Zukünftig die Ermittlung der `destinationId` und die Ermittlung der technischen Parameter über die FIT-Connect Routing über eine Abfrage mittels Leistungs-ID und geografischer Angabe (bspw. Gebiet oder Adresse) möglich sein. Sobald die Routing API umgesetzt ist (voraussichtlich Ende Q3 2021), wird diese Möglichkeit hier beschrieben. + +Ohne die Routing API wird vorgeschlagen, mit den potentiellen Kommunikationspartnern der jeweiligen Fachdomäne ein alternatives Verzeichnis zu vereinbaren, in dem die `destinationId` dem jeweiligen Zuständigkeitsbereich der empfangenden Stellen zugeordnet wird. + +## Informationen des Zustellpunktes erhalten + +Um an einen Zustellpunkt eine Einreichung korrekt zu übermitteln, ist es notwendig, die im Zustellpunkt hinterlegten technischen Parameter für die Einreichung zu ermitteln. Diese Informationen sind: +- Die zulässigen Fachdatenschemata (`schemas` Array): Hiermit teilt das empfangende System mit, dass es nur solche Fachdatensätze in `data` akzeptiert, die einem der angegeben Schemata entsprechen. Welches der dort angebenen Schemata entsprochen werden muss, muss das sendende System aus dem eigenen fachlichen Kontext heraus bestimmen. Wenn bspw. ein Antrag für einen Schwerbehindertenausweis gestellt wird, muss der Fachdatensatz aus den dort hinterlegten Schemata gemäß dem dortigen Schema für den Schwerbehindertausweis (bspw. ein FIM/XFall Schema) entsprechen. +- Der öffentliche Verschlüsselungsschlüssel (`kid` und `publicKeys`): Empfangende Systeme veröffentlichen in Form eines JSON Web Key Sets einen oder mehrere Public Keys für die Verschlüsselung der Einreichung. Welcher Public Key zum aktuellen Zeitpunkt für die Verschlüsselung genutzt werden muss, wird über den `kid` Parameter mitgeteilt. + +Hierzu stellt die Submission API einen Endpunkt bereit, der über den `destinationId` Parameter die technischer Parameter der Einreichung für den jeweiligen Zustellpunkt ausgibt. + +<Tabs + defaultValue="curl" + values={[ + { label: 'curl', value: 'curl', }, + ] + }> +<TabItem value="curl"> + +Über `curl` können diese Information mit dem Folgenden Aufruf erhalten werden. + +```bash +$ export SERVICE_URL=... +$ export JWT_TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJJc3N1Z...NL-MKFrDGvn9TvkA +$ export DESTINATION_ID=7a2668ad-3081-407c-9358-7ce4b6144b02 +$ curl \ + -H "Authentication: Bearer $JWT_TOKEN" \ + -H "Content-Type: application/json" \ + -X GET $SERVICE_URL/destinations/$DESTINATION_ID + +> { + "destinationId": "7881dba9-4055-4854-8b6d-11ea5b7f3047", + "schemas": [ + { + "schemaURI": "urn:xoev-de:xfall:standard:fim-s00000000009_1.0.0", + "mimeType": "application/xml" + } + ], + "encryptionKid": "c66e4423-e28d-4a1f-911d-818f9ab60221", + "publicKeys": { + "keys": [{ + "kty": "RSA", + "key_ops": [ + "wrapKey" + ], + "alg": "RSA-OAEP-256", + "x5c": [ + "...(base64 encoded cert)...", + "...(base64 encoded intermediate cert)...", + "...(base64 encoded root cert)..." + ], + "kid": "c66e4423-e28d-4a1f-911d-818f9ab60221", + "n": "hGALqq-nbAymF5M...puHAyo3-iMf3UaBsPj0s", + "e": "AQAB" + }] + } + } +``` + +## Eine neue Einreichung beginnen + +Das Beginnen einer neuen Einreichung über die API erfordert den Versand einer [HTTP POST Nachricht](../../apis/delivery-service.mdx#post-/submissions), die definiert, an welchen Zustellpunkt der Einreichung versendet werden soll und welche Inhalte übermittelt werden sollen. +Die Inhalte umfassen hierbei die Identifikatoren der Anhänge als UUIDs und die Information, ob Fachdaten mit versendet werden oder nicht. + +<Tabs + defaultValue="curl" + values={[ + { label: 'curl', value: 'curl', }, + { label: 'Java (Spring)', value: 'java', }, + { label: 'JavaScript', value: 'js', }, + { label: 'C#', value: 'csharp', }, + ] +}> +<TabItem value="curl"> + +```bash +$ export SERVICE_URL=... +$ export JWT_TOKEN=eyJhbGciOiJIUzI1NiJ9.eyJJc3N1Z...NL-MKFrDGvn9TvkA +$ export DESTINATION_ID=7a2668ad-3081-407c-9358-7ce4b6144b02 +$ curl \ + -H "Authentication: Bearer $JWT_TOKEN" \ + -H "Content-Type: application/json" \ + --data "{ \"destinationId\": \"$DESTINATION_ID\", \"\" { \"data\": false, \"attachments\": [] } }" \ + -X POST $SERVICE_URL/submissions + +> { + "destinationId": "7a2668ad-3081-407c-9358-7ce4b6144b02", + "submissionId": "9d618546-0ff7-4e93-9f15-714e5dd1bf12" +} +``` + +</TabItem> +<TabItem value="java"> + +```java +// TBD +``` + +</TabItem> +<TabItem value="js"> + +```js +import axios from 'axios' + +const url = '/submissions' +const data = { + destinationId: 'a1270669-ea36-4a0c-8f8f-c9d490e7f2bc', + announcedContentStructure: { + data: true, + attachments: [ + '1da99641-2067-4e8b-b049-91b2a6c90544', + '538a1365-092e-4d80-93b9-90eb8c1f5982' + ] + } +} +const token = 'eyJhbGciOiJIUzI1NiJ9.eyJyYW5kb20iOiJyYW5kb20ifQ.lXckRWoWCUBGM4ACZ6wIhYqplJeSw0HMEfE91jD1JPU' + +axios.post( + url, + data + { + baseURL, + timeout: 2000, + headers: { + 'Authentication': `Bearer ${token}` + } + } +) +``` + +</TabItem> +<TabItem value="csharp"> + +```chsarp +TBD +``` + +</TabItem> +</Tabs> diff --git a/docs/getting-started/sending/submit.mdx b/docs/getting-started/sending/submit.mdx index d2b35c5c9..d964a05db 100644 --- a/docs/getting-started/sending/submit.mdx +++ b/docs/getting-started/sending/submit.mdx @@ -1,6 +1,6 @@ --- title: Einreichung versenden -sidebar_position: 6 +sidebar_position: 7 --- import Tabs from '@theme/Tabs' -- GitLab