diff --git a/docs/details/event-log.md b/docs/details/event-log.md index dd738aec431e15b0678102e360d2eab4f34deb69..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 --- a/docs/details/event-log.md +++ b/docs/details/event-log.md @@ -1,111 +0,0 @@ -# Event Log - -Im Ereignisprotokoll werden relevante Ereignisse (events) aufgezeichnet. -Beim Abruf des Ereignisprotokoll liefert die API ein Array von JSON Web Token (JWT) gemäß [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519). -Der JWT ist einen Security Event Token (SET) gemäß [RFC 8417](https://datatracker.ietf.org/doc/html/rfc8417). -Bei der Erstellung und Prüfung der Security Event Token MÜSSEN die [Vorgaben für kryptographische Verfahren](./crypto.md) beachtet werden. - -## Aufbau eines Security Event Token (SET) - -### Header -Alle generierten Security Event Tokens MÜSSEN den Vogaben aus [RFC 7519](https://tools.ietf.org/html/rfc7519) entsprechen und über folgende Header-Attribute verfügen: - -| Feld | Inhalt | Erläuterung | -| ----- | -------------- | ----------- | -| `typ` | `secevent+jwt` | Wird gemäß [RFC 8417, Abschnitt 2.3](https://datatracker.ietf.org/doc/html/rfc8417#section-2.3) auf den festen Wert "`secevent+jwt`" gesetzt. | -| `alg` | `PS512` | Zur Signaturerstellung wird der Signaturalgorithmus RSASSA-PSS mit SHA-512 und MGF1 mit SHA-512 verwendet. Vorgabe gemäß [BSI TR-02102](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) in der Version 2021-01 (Stand 24. März 2021). | -| `kid` | *Key-ID des zugehörigen Public Keys* | Die Key-ID des Public Key, mit dem die Signatur des JWT geprüft werden kann. | - -**Beispiel** -```json -{ - "typ": "secevent+jwt", - "alg": "PS512", - "kid": "dd0409e5-410e-4d98-85b6-f81a40b8d980" -} -``` - -### Payload -Im Payload des signierten SET MÜSSEN mindestens die folgenden [standartisierten Felder](https://www.iana.org/assignments/jwt/jwt.xhtml) gesetzt sein: - -| Feld | Inhalt | Erläuterung | -| ------ | ----------------------------------------- | ------------------------------------------------------------ | -| iss | Identifizierungsmerkmal des Token Issuers | Dient dazu, um herauszufinden, wer den Token ausgestellt hat. Für vom Zustelldienst ausgestellt SET wird die Basis-Adresse (API-URL) verwendet. Für die antragsendenden und -empfangenden Systeme wird empfohlen, auch eine dem System zugeordnete URL zu verwenden. Sofern das System keine zur Identifikation nutzbare URL hat, ist eine andere eindeutige URI zu verwenden. | -| iat | Timestamp (UNIX-Format) | Zeitpunkt der Ausstellung des SET. | -| jti | UUID des Token | Die JWT ID ist eine eindeutige ID des SET bzw. JWT. Es wird eine zufällige UUID verwendet. | -| sub | URI, die den Gegenstand des SET identifiziert. | Das Subject eines SWT ist entweder eine Übertragung (submission), eine Antwort (reply) oder eine Vorgangsreferenz (case id). Die Angabe besteht jeweils aus Typ und ID (UUID) der Resource. | -| events | Dict der Events in diesem Event-Token | Das Objekt "events" enthält immer genau ein Event. Das Event selbst ist wieder ein Objekt, welches derzeit immer leer ist. Events könnten in Zukunft um Zusatzinformationen ergänzt werden. Siehe [Liste der möglichen Events](./status.md) | -| txn | URI, die den Vorgang identifiziert | Als "Transaction Identifier" wird die Vorgangsreferenz angegeben, auch wenn das Subject selbst die Vorgangsreferenz ist. In diesem Fall sind Subject und Transaction Identifier gleich. | - -**Hinweis:** Das Ereignisprotokoll darf keine personenbezogenen oder -beziehbaren Daten enthalten. - -**Wichtig**: Ohne Prüfung der Signatur des Security Event Token DARF NICHT auf die Korrektheit (Integrität) der Inhalte des SET-Payload vertraut werden. - -**Beispiel** -```json -{ - "iss": "https://api.fitko.de/fit-connect/", - "iat": 1622796532, - "jti": "0BF6DBF6-CE7E-44A3-889F-82FE74C3E715", - "sub": "submission:F65FEAB2-4883-4DFF-85FB-169448545D9F", - "events": { - "https://schema.fitko.de/fit-connect/events/accept-submission": {} - }, - "txn": "case:F73D30C6-8894-4444-8687-00AE756FEA90" -} -``` - -## Beispiel - -> **Hinweis:** Folgende Punkte in dieser Dokumentation sind noch nicht final: -- Die in den Beispielen verwendete API-Adresse `https://api.fitko.de/fit-connect/` ist durch die Basis-Adresse der real verwendeten API zu ersetzen. - -Der Sender ruft die Operation "Get Event Log" auf, z.B. `https://api.fitko.de/fit-connect/submissions/F65FEAB2-4883-4DFF-85FB-169448545D9F/log`. -Das Ergebnis könnte wie folgt aussehen. - -```json -{ - "eventLog": [ - "eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NDMxOSwKICAianRpIjogIkVEQ0ZCRjIxLTVCMTYtNEQwNi05OUQwLURDNEMyNkY0RkI5RSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvY3JlYXRlLXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.TQBR_CBsoULi3cGaGg4oqFelQ9GVn8G-cNokzTVDZgZf4D7x_8wjsDcgTd0aamiy8ErlnV1xoAoDcPw81vajrBCaYgf9KI4sNhsW78jlDi_ywK04YhFbkvloDMioGf_5zCNTBreN9bTnU_VYuWB23R_YrYGi2exONft-ZReN_crEvDaKLdG9hqnaCRFwKJ1t8TbLvIyBKLqQYEqP0Oh6m3WA9IRz3EB41S-PZgJCIzmz_GvXdRvw_1B8A_Q7aHr2SQ6Dc-c406UJ5P_7FuypE6tLyuYf5GkmFZSauQ51H4LLl8pLrsW2PJJ28cMavOEx0AWoRLwB7yKK5bAGtcALWw-0W7Wmw1QEX3DZGTpXbEUM0U_7iXeEFrdtfCCbFPMVbmlK-b66IyKK_6yeaOAEjQvCUOrALfa2sSOS6RWiNOKyA1l1L29VoIBXgQ8np72NMV8-AP7UnQO1NPBghBM6LW6tcXceWeP8ayy4eEaZQ639pqH4TJRRkQqnuoTeADpYL9sX2hM9173O4abWiE-Z8zW2AQ1jhUvVXJ8w9ddtMIyjZJZOqoy3TbHxUYpn4UqbedlDyahpUiKCT7-qU2jOjeXAXEPQvWlSzLigNtFvYCEq-fOe1lpeNktoQQrC3Y-szk2vNj5fT_KmJY1QG1bhyrUMoGbA-pe45c-FcCE7ErQ", - "eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NTczMiwKICAianRpIjogIjkwRDlCMjlELUMwNUYtNEYwMy04MUMwLUUyMzMxMTZDNTZEOSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvc3VibWl0LXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.THmHiZoYEMyyWCu2R4nEJtvgtB5PF0KAqtfu_Z-yVjfjSkXW7TtZnX96UAeCGsjpxkBJvXTXAgSB5n378KjZXebAtI7nbFE0gYgt3fwmxmpJitA-4e8v6KfvhwNcdqJHLKDzYRMq_yw7UiwLx1Cxz6nBiOKfR4piL707muKXTgD7DuP0kv-c6V9dGNQ4KzT_sJP5zDWogEzGWSVaLaJZrmDZHoUZMZ6C9kI7SvC-A7Q0ROkFznU_cpjjEAIG74_YCiICvjr91ueQWTdNyc1DBvxpEBtBWq6nWPTg0d91iQlhPUgNKbmC4QtG_tFctTYhX7stO-JbL-4VnAQjQHD5uw4SvvpPrTN4Z3Wz2IjMm8-ClI9imGKThfAqwTaWtJv7Bn_FDiN_nEuGyN2of-M2vZWa-DlZ2iPFct6ESp9PumaO_pIF5cUrX4IBoe3fcmg788-ClReytCMjD13uPVOVoIb3yimUdupOUROxb3MITowHP2-YG1gWqhQp22XSQXktugDHWezAuN0xuimwAJq_OvyoDxj4lsnn6BQkqZYdqD0hJghwqZIytg8PlIi76Cdvh8NFgVw48xZ0WUOFvBPJO2Qe8PiTSVX_P9CIIWxsKlYwg8vJ226qi0eYfD70ynjBDQIPmsOOSut6bFKgOLBFa9ZvCy6HmhyLa-EsgLhS4uc", - "eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NjUzMiwKICAianRpIjogIjBCRjZEQkY2LUNFN0UtNDRBMy04ODlGLTgyRkU3NEMzRTcxNSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvYWNjZXB0LXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.blxz8Tw_Sl8_tomcqxezamX_DVGyGiu61iYGv3mA3yVLLSDlPscjcHm_MCNm5iq-ODUk-FCW1ljOexN2czZJic8wvLhWhcUt8U2kkkjis-CWz4oqhuB4ynAj7Yyn4H4xkLoH7Y6k9pqW9P2mN7984o_578mJJ4mQSNEGcPr_BDbRc2nUKcupG7iS-hx6VTjrRTP7LGPyOblDB8oL_QyT9qY0US7PT35QgiraUSK3RWhDpj6C0I4bOV5cQeSqlXT2xIfeO3sUPeWLYVmGjuB8QWvDsniKz6JqRN-v39FrAppsOufdiRim36wtBZt9o-3txjtz5wu0_eSfjOueGJbfqAeWsbd2TYwZtL-7Z-MPfoe3XInDNmmTfxo4KXkF1GkRnGnjniwrWBHeh18A04NNHYcX-vsoijEreqDN2lEKwks3pDK5Twe5O9RxJ0cYB8oeKB55rJzs15pfla69qVn9zFvCAc_ji_9WaAa_mIG0zimMucG3qA0KrUww88FaS4heh5-Gs1Ik35QoUOCCa7ZMJMKxYArFCgUqHw-gX60U5mp4hy7tVe3hD-RxIRnlTIkEkHgDGmslVc1t8fC9oPgljQirPcTIeWhVyLmk6rJLgR5nqizujz3hDUCdBuRF43fS6qedmYfHq1MyakJzEFe2ht1rpGw4ftAt0kcOBOf2jyQ" - ] -} -``` - -Im Log dieser Submission wurden drei Events aufgezeichnet. -Das erste SET hat folgenden Payload. - -```json -{ - "iss": "https://api.fitko.de/fit-connect/", - "iat": 1622794319, - "jti": "EDCFBF21-5B16-4D06-99D0-DC4C26F4FB9E", - "sub": "submission:F65FEAB2-4883-4DFF-85FB-169448545D9F", - "events": { - "https://schema.fitko.de/fit-connect/events/create-submission": {} - }, - "txn": "case:F73D30C6-8894-4444-8687-00AE756FEA90" -} -``` - -In dem SET ist folgende Information abgelegt: -- Er wurde vom Zustelldienst https://api.fitko.de/fit-connect/ ausgestellt (iss = issuer) -- Er wurde am 04.06.2021 um 10:11:59 (Unixzeit 1622794319) aufgezeichnet (iat = issued at) -- Er hat die eindeutige ID `EDCFBF21-5B16-4D06-99D0-DC4C26F4FB9E` (jti = JWT ID) -- Er betrifft die Submission `F65FEAB2-4883-4DFF-85FB-169448545D9F` (sub = subject) -- Die Submission wurde angelegt "createSubmission" (events) -- Die Submission gehört zur Vorgangsreferenz (case) `F73D30C6-8894-4444-8687-00AE756FEA90` - -## Verarbeitung des Ereignisprotokolls - -Um die Informationen des Security Event Log abzurufen gehen Sie wie folgt vor: - -### 1. Abruf des Ereignisprotokolls über die API - -### 2. Decodierung jedes SET innerhalb des Arrays "securityEventLog" -Übergeben Sie den JWT an die Bibliothek. -Die Bibliothek kümmert sich automatisch um die Dekodierung und Validierung des JWT. -Je verwendeter Bibliothek unterscheidet sich der Zugriff auf den Payload des JWT/SET. - -Wenn ein Onlinedienst den Eventlog darstellen möchte, muss dieser sicherstellen, das die im Eventlog enthaltenen Einträge über eine valide Signatur verfügen und falls sich Einträge mit einer invaliden Signatur im Eventlog befinden, muss das für den User erkennbar sein. diff --git a/docs/details/status.md b/docs/details/status.md deleted file mode 100644 index bfd86b6ea082d9a9f0aee43e0552ca5eceb84844..0000000000000000000000000000000000000000 --- a/docs/details/status.md +++ /dev/null @@ -1,54 +0,0 @@ -# Status & Ereignisse - -Das folgende Statusdiagramm zeigt die Status und Ereignisse einer Einreichung. -Die Status sind als orange Ovale dargestellt. Rechtecke stehen für Ereignisse. Blau dargestellte Ereignisse werden vom Zustelldienst, grüne vom empfangenden System erstellt und signiert. - - - -## Status - -| Status | Bedeutung | -| ----- | --------- | -| `incomplete` | Das sendende System hat begonnen, die Einreichung zu übermitteln. Sie jedoch noch nicht abgesendet. | -| `submitted` | Das sendende System hat die Einreichung vollständig übermittelt und abgesendet. | -| `forwarded` | Ein vermittelndes System hat die Einreichung übernommen, sie aber noch nicht dem Zielsystem zugestellt. | -| `rejected` | Die Einreichung wurde durch den Empfänger zurückgewiesen. | -| `accepted` | Die Einreichung wurde durch den Empfänger akzeptiert. | - -Das Akzeptieren oder Zurückweisen von Einreichungen oder Antworten passiert auf einer rein technischen Ebene und trifft keine Aussage über die fachliche Korrektheit der Einreichungen. -Gründe für technische Rückweisungen wären beispielsweise Probleme bei der Entschlüsselung oder Validierungsfehler der Datenstrukturen. - -## Ereignisse (Events) - -### Ereignisse einer Einreichung (Submission Events) -| Event | Bedeutung | Erstellt und signiert durch | -| ----- | --------- | --------------------------- | -| `https://schema.fitko.de/fit-connect/events/create-submission` | Die Einreichung wurde durch den Sender angelegt. | Zustelldienst | -| `https://schema.fitko.de/fit-connect/events/submit-submission` | Die Einreichung wurde durch den Sender abgesendet. | Zustelldienst | -| `https://schema.fitko.de/fit-connect/events/notify-submission` | Der Empfänger wurde per Webhook über die Einreichung informiert. | Zustelldienst | -| `https://schema.fitko.de/fit-connect/events/forward-submission` | Ein nachgelagertes System hat die Einreichung zur Weiterleitung übernommen. | Empfangendes System | -| `https://schema.fitko.de/fit-connect/events/reject-submission` | Die Einreichung wurde durch den Empfänger zurückgewiesen. | Empfangendes System | -| `https://schema.fitko.de/fit-connect/events/accept-submission` | Die Einreichung wurde durch den Empfänger akzeptiert. | Empfangendes System | -| `https://schema.fitko.de/fit-connect/events/delete-submission` | Die Einreichung wurde durch den Zustelldienst gelöscht. | Zustelldienst | - -### Ereignisse einer Antwort (Reply Events) -| Event | Bedeutung | Erstellt und signiert durch | -| ----- | --------- | --------------------------- | -| `https://schema.fitko.de/fit-connect/events/create-reply` | Die Antwort wurde durch den Sender angelegt. | Zustelldienst | -| `https://schema.fitko.de/fit-connect/events/submit-reply` | Die Antwort wurde durch den Sender abgesendet. | Zustelldienst | -| `https://schema.fitko.de/fit-connect/events/notify-reply` | Der Empfänger wurde per Webhook über die Antwort informiert. | Zustelldienst | -| `https://schema.fitko.de/fit-connect/events/forward-reply` | Ein nachgelagertes System hat die Antwort zur Weiterleitung übernommen. | Adressat des Reply * | -| `https://schema.fitko.de/fit-connect/events/reject-reply` | Die Antwort wurde durch den Empfänger zurückgewiesen. | Adressat des Reply * | -| `https://schema.fitko.de/fit-connect/events/accept-reply` | Die Antwort wurde durch den Empfänger akzeptiert. | Adressat des Reply * | -| `https://schema.fitko.de/fit-connect/events/delete-reply` | Die Antwort wurde durch den Zustelldienst gelöscht. | Zustelldienst | - -*: Wird das Reply vom Sender zum Subscriber gesendet, ist der Subscriber der Adressat; wird es vom Subscriber zum Sender gesendet ist der Sender der Adressat. - -Das Akzeptieren oder Zurückweisen von Einreichungen oder Antworten passiert auf einer rein technischen Ebene und trifft keine Aussage über die fachliche Korrektheit der Einreichungen. -Gründe für technische Rückweisungen wären beispielsweise Probleme bei der Entschlüsselung oder Validierungsfehler der Datenstrukturen. - -### Ereignisse eines Vorgangs (Case Events) -| Event | Bedeutung | Erstellt und signiert durch | -| ----- | --------- | --------------------------- | -| `https://schema.fitko.de/fit-connect/events/close-case` | Die Vorgangsreferenz wurde geschlossen, es dürfen keine weiteren Replies mehr erfolgen. | Das System, das die Vorgangsreferenz schließt. | - diff --git a/docs/getting-started/event-log.md b/docs/getting-started/event-log.md index 6bdb1ddec65e7474daa9e7a728f6623b16261781..df1dfc981cc61e11a004e8dec40ea691f1b249b8 100644 --- a/docs/getting-started/event-log.md +++ b/docs/getting-started/event-log.md @@ -7,79 +7,90 @@ liefert die API ein Array von JSON Web Token (JWT) gemäß [RFC 7519](https://da JWT ist einen Security-Event-Token (SET) gemäß [RFC 8417](https://datatracker.ietf.org/doc/html/rfc8417). Wie mit den Security-Event-Token (SET) umgegangen wird, wird in diesem Abschnitt beschrieben. -## :construction: Erstellung eines Security-Event-Token (SET) +## Events -```java -private static final InputStream jwksPath = GenerateSignedToken.class.getClassLoader().getResourceAsStream("jwks.json");; -private static final UUID signatureKeyId = UUID.fromString("6508dbcd-ab3b-4edb-a42b-37bc69f38fed"); - -private static final String subject = "submission:f65feab2-4883-4dff-85fb-169448545d9f"; -private static final String event = "https://schema.fitko.de/fit-connect/events/accept-submission"; -private static final String transactionId = "case:f73d30c6-8894-4444-8687-00ae756fea90"; -// … -try { - JWKSet localKeys = JWKSet.load(jwksPath); - JWK key = localKeys.getKeyByKeyId(signatureKeyId.toString()); - - if (key == null) { - throw new RuntimeException("Cannot find key with specified Key Id"); - } +Das folgende Statusdiagramm zeigt die Status und Ereignisse einer Einreichung. Die Status sind als orange Ovale +dargestellt. Rechtecke stehen für Ereignisse. Blau dargestellte Ereignisse werden vom Zustelldienst, grüne vom +empfangenden System erstellt und signiert. - JWSSigner signer = new RSASSASigner(key.toRSAKey()); - JWTClaimsSet claimsSet = new JWTClaimsSet.Builder() - .issuer("https://my-custom-identifyable-service.domain") - .issueTime(new Date()) - .jwtID(UUID.randomUUID().toString()) - .subject(subject) - .claim("events", Map.of(event, Map.of())) - .claim("txn", transactionId) - .build(); - - JWSHeader header = JWSHeader.parse(Map.of( - "typ", "secevent+jwt", - "kid", key.getKeyID(), - "alg", "PS512" - )); - - SignedJWT signedJWT = new SignedJWT( - header, - claimsSet); - - signedJWT.sign(signer); - - signedJWT.serialize(); // => SET, serialized as Base64 encoded string -} catch (IOException | ParseException e) { - throw new RuntimeException("Error during loading of JWK-Set with signature keys."); -} catch (JOSEException e) { - throw new RuntimeException("Could not generate SET"); -} -``` + + +Das Akzeptieren oder Zurückweisen von Einreichungen oder Antworten passiert auf einer rein technischen Ebene und trifft +keine Aussage über die fachliche Korrektheit der Einreichungen. Gründe für technische Rückweisungen wären beispielsweise +Probleme bei der Entschlüsselung oder Validierungsfehler der Datenstrukturen. In der folgenden Tabelle sind die Ereignisse, +ihre Beschreibungen und die Autoren aufgeführt und beschrieben. + +| Event | Autor | Bedeutung | +|-----------------------------------------------------------------|---------------------|-------------------------------| +| `https://schema.fitko.de/fit-connect/events/create-submission` | Zustelldienst | Die Einreichung wurde durch den Sender angelegt. | +| `https://schema.fitko.de/fit-connect/events/submit-submission` | Zustelldienst | Die Einreichung wurde durch den Sender abgesendet. | +| `https://schema.fitko.de/fit-connect/events/notify-submission` | Zustelldienst | Der Empfänger wurde per Webhook über die Einreichung informiert. | +| `https://schema.fitko.de/fit-connect/events/forward-submission` | | Ein nachgelagertes System hat die Einreichung zur Weiterleitung übernommen. | +| `https://schema.fitko.de/fit-connect/events/reject-submission` | Empfangendes System | Die Einreichung wurde durch den Empfänger zurückgewiesen. | +| `https://schema.fitko.de/fit-connect/events/accept-submission` | Empfangendes System | Die Einreichung wurde durch den Empfänger akzeptiert. | +| `https://schema.fitko.de/fit-connect/events/delete-submission` | Zustelldienst | Die Einreichung wurde durch den Zustelldienst gelöscht. | + +<details> + +<summary>🚧 Weitere Ereignisse, relevant für die Zukunft ...</summary> + + +### Ereignisse einer Antwort (Reply Events) + +| Event | Autor | Bedeutung | +|-----------------------------------------------------------------|-------------------------|-------------------------------| +| `https://schema.fitko.de/fit-connect/events/create-reply` | Zustelldienst | Die Antwort wurde durch den Sender angelegt. | +| `https://schema.fitko.de/fit-connect/events/submit-reply` | Zustelldienst | Die Antwort wurde durch den Sender abgesendet. | +| `https://schema.fitko.de/fit-connect/events/notify-reply` | Zustelldienst | Der Empfänger wurde per Webhook über die Antwort informiert. | +| `https://schema.fitko.de/fit-connect/events/forward-reply` | Adressat der Reply[^1] | Ein nachgelagertes System hat die Antwort zur Weiterleitung übernommen. | +| `https://schema.fitko.de/fit-connect/events/reject-reply` | Adressat der Reply[^1] | Die Antwort wurde durch den Empfänger zurückgewiesen. | +| `https://schema.fitko.de/fit-connect/events/accept-reply` | Adressat der Reply[^1] | Die Antwort wurde durch den Empfänger akzeptiert. | +| `https://schema.fitko.de/fit-connect/events/delete-reply` | Zustelldienst | Die Antwort wurde durch den Zustelldienst gelöscht. | + +[^1]: Wird das Reply vom Sender zum Subscriber gesendet, ist der Subscriber der Adressat; wird es vom Subscriber zum Sender gesendet ist der Sender der Adressat. + +Das Akzeptieren oder Zurückweisen von Einreichungen oder Antworten passiert auf einer rein technischen Ebene und trifft keine Aussage über die fachliche Korrektheit der Einreichungen. +Gründe für technische Rückweisungen wären beispielsweise Probleme bei der Entschlüsselung oder Validierungsfehler der Datenstrukturen. -## Prüfung eines Security-Event-Token (SET) +### Ereignisse eines Vorgangs (Case Events) -### Allgemeine Struktur +| Event | Autor | Bedeutung | +|---------------------------------------------------------|-------------------------------------------------|-----------------------------| +| `https://schema.fitko.de/fit-connect/events/close-case` | Das System, das die Vorgangsreferenz schließt. | Die Vorgangsreferenz wurde geschlossen, es dürfen keine weiteren Replies mehr erfolgen. | -Alle generierten Security Event Tokens MÜSSEN den Vogaben aus [RFC 7519](https://tools.ietf.org/html/rfc7519) + + +</details> + +## Prüfung eines Security-Event-Token (SET) {#set-validation} + +Um eine vollständige Prüfung eines Security-Event-Tokens durchzuführen, MUSS zwingend sowohl die Einhaltung der +(kryptografischen) Vorgaben als auch die Signatur geprüft werden. Die Prüfung der Signatur des SET ist abhängig vom +ausstellenden System (Zustelldienst, Subscriber oder Sender). Sowohl die Prüfung der kryptografischen Vorgaben, als auch +die Prüfung der Signatur darf KEINESFALLS ausgelassen werden. + +### Prüfung der Einhaltung von kryptografischen Vorgaben und der Struktur + +Alle generierten Security-Event-Tokens MÜSSEN den Vorgaben aus [RFC 7519](https://tools.ietf.org/html/rfc7519) entsprechen und über folgende Header-Attribute verfügen: -| Feld | Inhalt | Erläuterung | -| ----- | -------------- | ----------- | -| `typ` | `secevent+jwt` | Wird gemäß [RFC 8417, Abschnitt 2.3](https://datatracker.ietf.org/doc/html/rfc8417#section-2.3) auf den festen Wert "`secevent+jwt`" gesetzt. | -| `alg` | `PS512` | Zur Signaturerstellung wird der Signaturalgorithmus RSASSA-PSS mit SHA-512 und MGF1 mit SHA-512 verwendet. Vorgabe gemäß [BSI TR-02102](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) in der Version 2021-01 (Stand 24. März 2021). | -| `kid` | *Key-ID des zugehörigen Public -Keys* | Die Key-ID des Public Key, mit dem die Signatur des JWT geprüft werden kann. | - -Im Payload des signierten SET MÜSSEN mindestens die -folgenden [standartisierten Felder](https://www.iana.org/assignments/jwt/jwt.xhtml) gesetzt sein: - -| Feld | Inhalt | Erläuterung | -| ------ | ----------------------------------------- | ------------------------------------------------------------ | -| iss | Identifizierungsmerkmal des Token Issuers | Dient dazu, um herauszufinden, wer den Token ausgestellt hat. Für vom Zustelldienst ausgestellt SET wird die Basis-Adresse (API-URL) verwendet. Für die antragsendenden und -empfangenden Systeme wird empfohlen, auch eine dem System zugeordnete URL zu verwenden. Sofern das System keine zur Identifikation nutzbare URL hat, ist eine andere eindeutige URI zu verwenden. | -| iat | Timestamp (UNIX-Format) | Zeitpunkt der Ausstellung des SET. | -| jti | UUID des Token | Die JWT ID ist eine eindeutige ID des SET bzw. JWT. Es wird eine zufällige UUID verwendet. | -| sub | URI, die den Gegenstand des SET identifiziert. | Das Subject eines SWT ist entweder eine Übertragung (submission), eine Antwort (reply) oder eine Vorgangsreferenz (case id). Die Angabe besteht jeweils aus Typ und ID (UUID) der Resource. | -| events | Dict der Events in diesem Event-Token | Das Objekt "events" enthält immer genau ein Event. Das Event selbst ist wieder ein Objekt, welches derzeit immer leer ist. Events könnten in Zukunft um Zusatzinformationen ergänzt werden. | -| txn | URI, die den Vorgang identifiziert | Als "Transaction Identifier" wird die Vorgangsreferenz angegeben, auch wenn das Subject selbst die Vorgangsreferenz ist. In diesem Fall sind Subject und Transaction Identifier gleich. | +| Feld | Inhalt | Erläuterung | +|-------|-------------------------------------|---------------------------------------------------------------------------------------| +| `typ` | `secevent+jwt` | Wird gemäß [RFC 8417, Abschnitt 2.3](https://datatracker.ietf.org/doc/html/rfc8417#section-2.3) auf den festen Wert "`secevent+jwt`" gesetzt. | +| `alg` | `PS512` | Zur Signaturerstellung wird der Signaturalgorithmus RSASSA-PSS mit SHA-512 und MGF1 mit SHA-512 verwendet. Vorgabe gemäß [BSI TR-02102](https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102.html) in der Version 2021-01 (Stand 24. März 2021). | +| `kid` | Key-ID des zugehörigen Public Keys | Die Key-ID des Public Key, mit dem die Signatur des JWT geprüft werden kann. | + +Im Payload des signierten SET MÜSSEN die folgenden [standardisierten Felder](https://www.iana.org/assignments/jwt/jwt.xhtml) +gesetzt sein: + +| Feld | Inhalt | Erläuterung | +|--------|------------------------------------------------|---------------------------------------------------------------| +| iss | Id des Token Issuers | Dient dazu, um herauszufinden, wer den Token ausgestellt hat. Für vom Zustelldienst ausgestellt SET wird die Basis-Adresse (API-URL) verwendet. Für die antragsendenden und -empfangenden Systeme wird empfohlen, auch eine dem System zugeordnete URL zu verwenden. Sofern das System keine zur Identifikation nutzbare URL hat, ist eine andere eindeutige URI zu verwenden. | +| iat | Timestamp (UNIX-Format) | Zeitpunkt der Ausstellung des SET. | +| jti | UUID des Token | Die JWT ID ist eine eindeutige ID des SET bzw. JWT. Es wird eine zufällige UUID verwendet. | +| sub | URI, die den Gegenstand des SET identifiziert | Das Subject eines SWT ist entweder eine Übertragung (submission), eine Antwort (reply) oder eine Vorgangsreferenz (case id). Die Angabe besteht jeweils aus Typ und ID (UUID) der Resource. | +| events | JSON-Objekt der Events in diesem Event-Token | Das Objekt "events" beschreibt eine oder mehrere Ereignisse zu einem logischen Sachverhalt bzw. Gesamtereignis, wie bspw. der Versendung einer Einreichung wurde durch den Sender. Dieses Objekt beinhaltet immer zwingend eine URI, die das jeweilige Gesamtereignis eindeutig identifiziert. Das Objekt der URI des Gesamtereignisses ist aktuell leer, kann aber zukünftig weitere Details zu einem Gesamtereignis enthalten. | +| txn | URI, die den Vorgang identifiziert | Als "Transaction Identifier" wird die Vorgangsreferenz angegeben, auch wenn das Subject selbst die Vorgangsreferenz ist. In diesem Fall sind Subject und Transaction Identifier gleich. | :::note SET Beispiel @@ -150,9 +161,6 @@ private void validatePayload(JWTClaimsSet payload) throws ParseException { String transactionId = payload.getStringClaim("txn"); validateTrueOrElseThrow(transactionId.matches("case:" + uuidPattern), "The provided txn does not match the allowed pattern."); - - String event = payload.getJSONObjectClaim("events").keySet().stream().findFirst().get(); - validateTrueOrElseThrow(Event.ofURL(event) != null, "The provided event is not a valid event supported by this instance."); } private void validateTrueOrElseThrow(boolean expression, String msg) { @@ -162,7 +170,7 @@ private void validateTrueOrElseThrow(boolean expression, String msg) { } ``` -### … des Zustelldienstes +### Signaturprüfung eines vom Zustelldienst ausgestellten SET Um die Signatur eines SET zu überprüfen, welches vom Zustelldienst ausgestellt wurde, ist es notwendig auf die verwendeten Schlüssel zugreifen zu können. Der Zustelldienst stellt ein JSON Web Key (JWK) Set öffentlich zugänglich @@ -211,6 +219,11 @@ boolean verifySignature(SignedJWT securityEventToken, String keyId) { } ``` -### :construction: … eines Senders/Empfängers +**Hinweis:** Das Ereignisprotokoll darf keine personenbezogenen oder -beziehbaren Daten enthalten. + +**Wichtig**: Ohne Prüfung der Signatur des Security Event Token DARF NICHT auf die Korrektheit (Integrität) der Inhalte des SET-Payload vertraut werden. + + +### :construction: Signaturprüfung eines vom Senders/Subscriber ausgestellten SET TBD diff --git a/docs/getting-started/receiving/process-and-acknowledge.mdx b/docs/getting-started/receiving/process-and-acknowledge.mdx index 73934cf64b7053f5626aeb479c42667e5e913499..479cbcdd27755e5ebfb1e1b511de4b549c254878 100644 --- a/docs/getting-started/receiving/process-and-acknowledge.mdx +++ b/docs/getting-started/receiving/process-and-acknowledge.mdx @@ -5,3 +5,55 @@ title: 🚧 Empfangsbestätigung Der letzte Schritt zum Empfang einer Einreichung ist die Bestätigung des Empfangs und damit auch der Gültigkeit der Einreichung. Mit Gültigkeit ist hier gemeint, dass alle Informationen erfolgreich heruntergeladen, entschlüsselt und im Falle der Metadaten validiert werden konnten. + +- Es sollte grundsätzlich beschrieben werden, welche Optionen für den SET aus Sicht des Empfänger bestehen und welche Folgen das hat (Im Sinne des Statusmodells. Wird können gerne das zusammen durchgehen) +- Die Generierung des SETs und die Übermittlung an die API +- Der Abruf des Logs. Für die Validierung wird auf diesen Artikel hier verwiesen + +## :construction: Erstellung eines Security-Event-Token (SET) + +```java +private static final InputStream jwksPath = GenerateSignedToken.class.getClassLoader().getResourceAsStream("jwks.json");; +private static final UUID signatureKeyId = UUID.fromString("6508dbcd-ab3b-4edb-a42b-37bc69f38fed"); + +private static final String subject = "submission:f65feab2-4883-4dff-85fb-169448545d9f"; +private static final String event = "https://schema.fitko.de/fit-connect/events/accept-submission"; +private static final String transactionId = "case:f73d30c6-8894-4444-8687-00ae756fea90"; +// … +try { + JWKSet localKeys = JWKSet.load(jwksPath); + JWK key = localKeys.getKeyByKeyId(signatureKeyId.toString()); + + if (key == null) { + throw new RuntimeException("Cannot find key with specified Key Id"); + } + + JWSSigner signer = new RSASSASigner(key.toRSAKey()); + JWTClaimsSet claimsSet = new JWTClaimsSet.Builder() + .issuer("https://my-custom-identifiable-service.domain") + .issueTime(new Date()) + .jwtID(UUID.randomUUID().toString()) + .subject(subject) + .claim("events", Map.of(event, Map.of())) + .claim("txn", transactionId) + .build(); + + JWSHeader header = JWSHeader.parse(Map.of( + "typ", "secevent+jwt", + "kid", key.getKeyID(), + "alg", "PS512" + )); + + SignedJWT signedJWT = new SignedJWT( + header, + claimsSet); + + signedJWT.sign(signer); + + signedJWT.serialize(); // => SET, serialized as Base64 encoded string +} catch (IOException | ParseException e) { + throw new RuntimeException("Error during loading of JWK-Set with signature keys."); +} catch (JOSEException e) { + throw new RuntimeException("Could not generate SET"); +} +``` diff --git a/docs/getting-started/sending/query-status.mdx b/docs/getting-started/sending/query-status.mdx index 1ce128c54456404b01ba5f38df5fcc5e4a53b165..53e22baf0a7bccbdea601a2039503e4f3c84d2fd 100644 --- a/docs/getting-started/sending/query-status.mdx +++ b/docs/getting-started/sending/query-status.mdx @@ -3,8 +3,6 @@ title: 🚧 Status abfragen sidebar_position: 9 --- -import Mermaid from '@site/src/components/Mermaid' - :::caution Hinweis :construction: Die Abfrage des Status einer Einreichung ist noch unter Bearbeitung, da das Statusmodell gerade überarbeitet wird. @@ -12,17 +10,87 @@ Zukünftig wird es eine Möglichkeit geben, bzgl. Statusänderungen über einen ::: -Nachdem die Einreichung abgeschlossen wurde, kann der Status der Einreichung abgefragt werden. - -<Mermaid> - stateDiagram-v2 - [*] --> Incomplete - Incomplete --> Submitted - Submitted --> Forwarded - Forwarded --> Rejected - Forwarded --> Accepted - Submitted --> Accepted - Submitted --> Rejected - Accepted --> [*] - Rejected --> [*] -</Mermaid> +Nachdem die Einreichung versendet worden ist, kann der Status dieser abgefragt werden. Der Status ist für das sendende +System relevant, da es sämtliche Inhalte einer Einreichung vorhalten sollte, bis der Status sich auf *Accepted* geändert +hat. Dies sollte es tun, damit es im Falle eines Fehlers die Informationen erneut übermitteln kann. + +Das Statusmodell einer Einreichung ist in der folgenden Grafik dargestellt und enthält fünf Zustände (in orange), die in +der darunterliegenden Tabelle beschrieben sind. + + + +| Status | Bedeutung | +|---------------|---------------------------------------------------------------------------------------------------------| +| `incomplete` | Das sendende System hat begonnen, die Einreichung zu übermitteln. Sie jedoch noch nicht abgesendet. | +| `submitted` | Das sendende System hat die Einreichung vollständig übermittelt und abgesendet. | +| `forwarded` | Ein vermittelndes System hat die Einreichung übernommen, sie aber noch nicht dem Zielsystem zugestellt. | +| `rejected` | Die Einreichung wurde durch den Empfänger zurückgewiesen. | +| `accepted` | Die Einreichung wurde durch den Empfänger akzeptiert. | + +## Status über die Einreichung abfragen + +Der Status kann über zwei Wege in zwei verschiedenen Formen abgerufen werden. Einerseits wird der Status in einer Einreichung +abgespeichert und ist in der Antwort von `GET /submissions/<uuid>` im Feld `currentStatus` enthalten. Der Wert darin +entspricht dem Wert aus obiger Tabelle. + +```json {10} +{ + "destinationId": "879ee109-a690-4db8-ab32-424284184d7d", + "submissionId": "ce75a6b8-d72f-4b94-b09e-af6be35dbc2ae", + "caseId": "e89e107e-ed79-40e6-ad34-4e770f9df26d", + "attachments": [ + ... + ], + "encryptedMetadata": "ey...Yfiz5g", + "encryptedData": "eyJlbmMiO...iz5g", + "currentStatus": "submitted", + "announcedContentStructure": { + ... + }, + "serviceType": { + ... + } +} +``` + +## Status über den Event Log abfragen + +Alternativ kann der Status über `GET /submissions/<uuid>/events` abgefragt werden. Hierbei wird der Event Log der Einreichung +zurückgeliefert, der die verschiedenen Statusübergänge bzw. abgelegten Ereignisse beinhaltet. Das Ergebnis könnte wie folgt aussehen: + +```json +{ + "eventLog": [ + "eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NDMxOSwKICAianRpIjogIkVEQ0ZCRjIxLTVCMTYtNEQwNi05OUQwLURDNEMyNkY0RkI5RSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvY3JlYXRlLXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.TQBR_CBsoULi3cGaGg4oqFelQ9GVn8G-cNokzTVDZgZf4D7x_8wjsDcgTd0aamiy8ErlnV1xoAoDcPw81vajrBCaYgf9KI4sNhsW78jlDi_ywK04YhFbkvloDMioGf_5zCNTBreN9bTnU_VYuWB23R_YrYGi2exONft-ZReN_crEvDaKLdG9hqnaCRFwKJ1t8TbLvIyBKLqQYEqP0Oh6m3WA9IRz3EB41S-PZgJCIzmz_GvXdRvw_1B8A_Q7aHr2SQ6Dc-c406UJ5P_7FuypE6tLyuYf5GkmFZSauQ51H4LLl8pLrsW2PJJ28cMavOEx0AWoRLwB7yKK5bAGtcALWw-0W7Wmw1QEX3DZGTpXbEUM0U_7iXeEFrdtfCCbFPMVbmlK-b66IyKK_6yeaOAEjQvCUOrALfa2sSOS6RWiNOKyA1l1L29VoIBXgQ8np72NMV8-AP7UnQO1NPBghBM6LW6tcXceWeP8ayy4eEaZQ639pqH4TJRRkQqnuoTeADpYL9sX2hM9173O4abWiE-Z8zW2AQ1jhUvVXJ8w9ddtMIyjZJZOqoy3TbHxUYpn4UqbedlDyahpUiKCT7-qU2jOjeXAXEPQvWlSzLigNtFvYCEq-fOe1lpeNktoQQrC3Y-szk2vNj5fT_KmJY1QG1bhyrUMoGbA-pe45c-FcCE7ErQ", + "eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NTczMiwKICAianRpIjogIjkwRDlCMjlELUMwNUYtNEYwMy04MUMwLUUyMzMxMTZDNTZEOSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvc3VibWl0LXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.THmHiZoYEMyyWCu2R4nEJtvgtB5PF0KAqtfu_Z-yVjfjSkXW7TtZnX96UAeCGsjpxkBJvXTXAgSB5n378KjZXebAtI7nbFE0gYgt3fwmxmpJitA-4e8v6KfvhwNcdqJHLKDzYRMq_yw7UiwLx1Cxz6nBiOKfR4piL707muKXTgD7DuP0kv-c6V9dGNQ4KzT_sJP5zDWogEzGWSVaLaJZrmDZHoUZMZ6C9kI7SvC-A7Q0ROkFznU_cpjjEAIG74_YCiICvjr91ueQWTdNyc1DBvxpEBtBWq6nWPTg0d91iQlhPUgNKbmC4QtG_tFctTYhX7stO-JbL-4VnAQjQHD5uw4SvvpPrTN4Z3Wz2IjMm8-ClI9imGKThfAqwTaWtJv7Bn_FDiN_nEuGyN2of-M2vZWa-DlZ2iPFct6ESp9PumaO_pIF5cUrX4IBoe3fcmg788-ClReytCMjD13uPVOVoIb3yimUdupOUROxb3MITowHP2-YG1gWqhQp22XSQXktugDHWezAuN0xuimwAJq_OvyoDxj4lsnn6BQkqZYdqD0hJghwqZIytg8PlIi76Cdvh8NFgVw48xZ0WUOFvBPJO2Qe8PiTSVX_P9CIIWxsKlYwg8vJ226qi0eYfD70ynjBDQIPmsOOSut6bFKgOLBFa9ZvCy6HmhyLa-EsgLhS4uc", + "eyJraWQiOiJkZDA0MDllNS00MTBlLTRkOTgtODViNi1mODFhNDBiOGQ5ODAiLCJ0eXAiOiJzZWNldmVudCtqd3QiLCJhbGciOiJQUzUxMiJ9.ewogICJpc3MiOiAiaHR0cHM6Ly9hcGkuZml0a28uZGUvZml0LWNvbm5lY3QvIiwKICAiaWF0IjogMTYyMjc5NjUzMiwKICAianRpIjogIjBCRjZEQkY2LUNFN0UtNDRBMy04ODlGLTgyRkU3NEMzRTcxNSIsCiAgInN1YiI6ICJzdWJtaXNzaW9uOkY2NUZFQUIyLTQ4ODMtNERGRi04NUZCLTE2OTQ0ODU0NUQ5RiIsCiAgImV2ZW50cyI6IHsKICAgICJodHRwczovL3NjaGVtYS5maXRrby5kZS9maXQtY29ubmVjdC9ldmVudHMvYWNjZXB0LXN1Ym1pc3Npb24iOiB7fQogIH0sCiAgInR4biI6ICJjYXNlOkY3M0QzMEM2LTg4OTQtNDQ0NC04Njg3LTAwQUU3NTZGRUE5MCIKfQ.blxz8Tw_Sl8_tomcqxezamX_DVGyGiu61iYGv3mA3yVLLSDlPscjcHm_MCNm5iq-ODUk-FCW1ljOexN2czZJic8wvLhWhcUt8U2kkkjis-CWz4oqhuB4ynAj7Yyn4H4xkLoH7Y6k9pqW9P2mN7984o_578mJJ4mQSNEGcPr_BDbRc2nUKcupG7iS-hx6VTjrRTP7LGPyOblDB8oL_QyT9qY0US7PT35QgiraUSK3RWhDpj6C0I4bOV5cQeSqlXT2xIfeO3sUPeWLYVmGjuB8QWvDsniKz6JqRN-v39FrAppsOufdiRim36wtBZt9o-3txjtz5wu0_eSfjOueGJbfqAeWsbd2TYwZtL-7Z-MPfoe3XInDNmmTfxo4KXkF1GkRnGnjniwrWBHeh18A04NNHYcX-vsoijEreqDN2lEKwks3pDK5Twe5O9RxJ0cYB8oeKB55rJzs15pfla69qVn9zFvCAc_ji_9WaAa_mIG0zimMucG3qA0KrUww88FaS4heh5-Gs1Ik35QoUOCCa7ZMJMKxYArFCgUqHw-gX60U5mp4hy7tVe3hD-RxIRnlTIkEkHgDGmslVc1t8fC9oPgljQirPcTIeWhVyLmk6rJLgR5nqizujz3hDUCdBuRF43fS6qedmYfHq1MyakJzEFe2ht1rpGw4ftAt0kcOBOf2jyQ" + ] +} +``` + +Im Log dieser Einreichung wurden drei Events aufgezeichnet. Das letzte, aktuellste Security-Event-Token hat folgenden Payload. + +```json +{ + "iss": "https://api.fitko.de/fit-connect/", + "iat": 1622796532, + "jti": "0BF6DBF6-CE7E-44A3-889F-82FE74C3E715", + "sub": "submission:F65FEAB2-4883-4DFF-85FB-169448545D9F", + "events": { + "https://schema.fitko.de/fit-connect/events/accept-submission": {} + }, + "txn": "case:F73D30C6-8894-4444-8687-00AE756FEA90" +} +``` + +In dem SET ist folgende Information abgelegt: +- Er wurde vom Zustelldienst https://api.fitko.de/fit-connect/ ausgestellt (iss = issuer) +- Er wurde am 04.06.2021 um 08:48:52 GMT+0 (Unixzeit 1622796532) aufgezeichnet (iat = issued at) +- Er hat die eindeutige ID `0BF6DBF6-CE7E-44A3-889F-82FE74C3E715` (jti = JWT ID) +- Er betrifft die Einreichung `F65FEAB2-4883-4DFF-85FB-169448545D9F` (sub = subject) +- Die Submission wurde angelegt "accept-submission" (events) +- Die Submission gehört zur Vorgangsreferenz (case) `F73D30C6-8894-4444-8687-00AE756FEA90` + +Aus dem Event des SET lässt sich ableiten dass der aktuelle Status der Einreichung `accepted` ist und der Zeitpunkt des +Übergangs der 04.06.2021 um 08:48:52 GMT+0 war. Da alle SETs im Event Log signiert sind, kann diese Signatur auch noch +überprüft werden. Die Überprüfung ist im Artikel zum [Event Log](../event-log.md#set-validation) beschrieben. diff --git a/docs/sidebar.js b/docs/sidebar.js index 0d2693c40897e785e0e3bfb97ac4244fadfdf8bd..0703c4659419437383f11569764a177aeb9033f8 100644 --- a/docs/sidebar.js +++ b/docs/sidebar.js @@ -75,8 +75,6 @@ module.exports = { label: 'Detailinformationen', items: [ 'details/crypto', - 'details/status', - 'details/event-log', 'details/schema-reference', 'details/pgp-export', {