diff --git a/docs/changelog.md b/docs/changelog.md index a769afe6a087fc163c0d2eb3e53471422bb0d309..8a2da4120efcd10528e5fb66f1ae52911e4a868d 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -4,6 +4,11 @@ Das Format dieser Datei basiert auf [Keep a Changelog](https://keepachangelog.co Das hier veröffentlichte Changelog bezieht sich auf die [Testinstanz von FIT-Connect](getting-started/environments.mdx). +## 2023-03-23 +### Self Service Portal 1.6.0 +- Das Design der Login-Seite des Self-Service-Portals wurde neugestaltet und orientiert sich jetzt am Design des restlichen Portals. ([Story](https://git.fitko.de/fit-connect/planning/-/issues/384)) +- [OpenCoDE](https://opencode.de) kann nun für die Authentifizierung im [Self-Service-Portal der Testumgebung](getting-started/account.mdx) genutzt werden. ([Story](https://git.fitko.de/fit-connect/planning/-/issues/457)) + ## 2023-02-20 ### Dokumentation - Der [Umgang mit dem `replyChannel`-Attribut im Metadatensatz](receiving/verification.mdx) durch Subscriber wurde angepasst/korrigiert. diff --git a/docs/getting-started/account.mdx b/docs/getting-started/account.mdx index 6539b3dc31d8c2d863bab19966a80cf9ba55135b..1f66702724c908f4ecc799f28c074df139de26c1 100644 --- a/docs/getting-started/account.mdx +++ b/docs/getting-started/account.mdx @@ -17,8 +17,9 @@ Eine Nutzung des Self-Service-Portals (SSP) setzt eine Authentifizierung über e #### Username/Passwort erforderlich -In der Testumgebung ist die Authentifizierung per Username und Passwort über Ihren Account bei GitHub oder GitLab möglich. -Zudem können Sie sich mit einem Account der OpenCoDE-Plattform anmelden. Eine Neu-Registrierung über das GitLab der FITKO wird zugunsten des Logins über die OpenCoDE-Plattform nicht mehr unterstützt. +In der Testumgebung ist die Authentifizierung per Username und Passwort über Ihren Account bei GitHub, GitLab.com oder [OpenCoDE](https://opencode.de/) möglich. +Ein Account auf der OpenCoDE-Plattform der öffentlichen Verwaltung kann selbstständig über das [Registrierungsformular](https://opencode.de/de/registrieren) erstellt werden. +Eine Neu-Registrierung über das GitLab der FITKO wird zugunsten des Logins über die OpenCoDE-Plattform nicht mehr unterstützt. <img width="950" alt="Übersicht der aktuell unterstützten OAuth 2.0 Identiy Provider" src={useBaseUrl('/images/ssp/1-Login-Verfahren.png')} /> diff --git a/docs/getting-started/event-log/events.mdx b/docs/getting-started/event-log/events.mdx index 4a1785afd95240c6e4060073f554a11ca1b13a1f..30d2ca6331c3082203d8318ed82a9ee999e3ebb7 100644 --- a/docs/getting-started/event-log/events.mdx +++ b/docs/getting-started/event-log/events.mdx @@ -17,7 +17,7 @@ In der folgenden Tabelle sind die möglichen Ereignisse, ihre Beschreibungen und |------------------------------------------------------------------------------------------|-----------------------------------|-------------------------------| | `https://schema.fitko.de/fit-connect/events/create-submission` [↓](#create-submission) | Zustelldienst | Die Einreichung wurde durch den Sender angelegt. | | `https://schema.fitko.de/fit-connect/events/submit-submission` [↓](#submit-submission) | Zustelldienst | Die Einreichung wurde durch den Sender abgesendet. | -| `https://schema.fitko.de/fit-connect/events/notify-submission` [↓](#notify-submission) | Zustelldienst | Der Empfänger wurde per Webhook über die Einreichung informiert. | +| `https://schema.fitko.de/fit-connect/events/notify-submission` [↓](#notify-submission) | Zustelldienst | Der Subscriber hat Kenntnis von der Einreichung erlangt (der Subscriber wurde per Callback informiert oder hat die Liste der verfügbaren Submissions abgerufen). | | `https://schema.fitko.de/fit-connect/events/forward-submission` [↓](#forward-submission) | Empfangendes System | Ein nachgelagertes System hat die Einreichung zur Weiterleitung übernommen. | | `https://schema.fitko.de/fit-connect/events/reject-submission` [↓](#reject-submission) | Empfangendes System/Zustelldienst | Die Einreichung wurde durch den Empfänger zurückgewiesen *oder* die Einreichung war mehr als 14 Tage im Status `submitted` und wurde deshalb vom Zustelldienst zurückgewiesen. | | `https://schema.fitko.de/fit-connect/events/accept-submission` [↓](#accept-submission) | Empfangendes System | Die Einreichung wurde durch den Empfänger akzeptiert. | diff --git a/docs/roadmap.mdx b/docs/roadmap.mdx index 6e0d491d7257b2080ee869a97767723546dfe960..a09668582c15ef08f2aa5848d6f87a3fa5829e3d 100644 --- a/docs/roadmap.mdx +++ b/docs/roadmap.mdx @@ -16,7 +16,8 @@ Diese Seite stellt neue Features vor, die in nächster Zeit für FIT-Connect gep FIT-Connect umfasst die folgenden Bereiche: - **API-Spezifikation:** Die Spezifikation der FIT-Connect-Schnittstellen, die in OpenAPI geschrieben ist. -- **Entwicklerdokumentation und -tools:** Die Dokumentation von FIT-Connect zur Anbindung an sendende und empfangende Systeme sowie die Bereitstellung von Tools für Querschnittsaufgaben wie Tokenhandling, +- **Entwicklerdokumentation und -tools:** Die Dokumentation von FIT-Connect zur Anbindung an sendende und empfangende Systeme + sowie die Bereitstellung von Tools für Querschnittsaufgaben wie Tokenhandling, Signaturprüfung und Verschlüsselung. - **Infrastruktur:** Die IT-Infrastruktur für Anbindungstests und Validierung sowie für Produktivbetrieb der FIT-Connect-API. @@ -48,7 +49,4 @@ Der Kreis der Nutzungsberechtigten wird kontinuierlich im Rahmen des Projekts er ## Feature-Roadmap bis 2023 - - - -*) Es konnte kein Pilotverfahren in Q4 2022 gefunden werden. \ No newline at end of file + \ No newline at end of file diff --git a/docs/sending/get-destination.mdx b/docs/sending/get-destination.mdx index 942360636371526b496addabaf31210e99ee73be..d8be213206d7470b522fc1e9900046a3a80aa50c 100644 --- a/docs/sending/get-destination.mdx +++ b/docs/sending/get-destination.mdx @@ -382,9 +382,9 @@ eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjNTNjd6UVE3QWFMdHFuSkthV2Y3N0FjM1d3 Die Prüfung der Signatur kann nur auf einer vollständigen Signatur erfolgen. Für die Umwandlung einer Detached Signature in eine gewöhnliche JSON Web Signature muss der Payload (`destinationParameters`) als Base64-URL-Encoded String der Signature hinzugefügt werden. -Dabei ist für das JSON des Payload zu beachten, dass +Dabei ist für das JSON des Payloads zu beachten, dass - alle semantisch unbedeutenden nicht-druckbaren Zeichen (Leerzeichen, Tabs, Line Feed `\n`, Carriage Return `\r`) vor und nach den strukturierenden Zeichen ([, {, ], }, :, ,) aus dem JSON-Payload entfernt werden und -- die Attribute des JSON-Objekts in alphabetischer Reihenfolge sortiert werden. +- die Attribute des JSON-Objekts in alphabetischer Reihenfolge sortiert werden. Die Sortierung ist unabhängig von der Groß-/Kleinschreibung der Attribute. <Tabs groupId="examples" defaultValue="csharp_sdk" @@ -409,13 +409,65 @@ Eine Beschreibung des .NET-SDKs finden Sie im Hauptmenü unter "SDKs > .NET-SDK" <TabItem value="java"> ```java - int firstPoint = detachedSignature.indexOf("."); - Base64URL payload = Base64URL.encode(sortedAndCleanedPayloadJson): - SignedJWT signedJWT = new SignedJWT( - new Base64URL(headerParameterOfJWS.substring(0, firstPoint)), - payload, - new Base64URL(headerParameterOfJWS.substring(firstPoint + 2)) - ); + + import com.fasterxml.jackson.databind.json.JsonMapper; + + import com.nimbusds.jose.jwk.RSAKey; + import com.nimbusds.jose.util.Base64URL; + import com.nimbusds.jwt.SignedJWT; + + // Object mapper that sorts properties alphabetically at serialisation + private static final ObjectMapper MAPPER = getConfiguredJsonMapper(); + + private SignedJWT combineDetachedSignatureWithPayload(final Route route) throws ParseException, JsonProcessingException { + final SignedJWT detachedSignature = SignedJWT.parse(route.getDestinationParametersSignature()); + final Base64URL encodedDetachedPayloadPart = getBase64EncodedDetachedPayload(route); + final Base64URL headerPart = detachedSignature.getHeader().getParsedBase64URL(); + final Base64URL signaturePart = detachedSignature.getSignature(); + return new SignedJWT(headerPart, encodedDetachedPayloadPart, signaturePart); + } + + private Base64URL getBase64EncodedDetachedPayload(final Route route) throws JsonProcessingException { + final RouteDestination detachedPayload = route.getDestinationParameters(); + final String cleanedDetachedPayload = Strings.cleanNonPrintableChars(MAPPER.writeValueAsString(detachedPayload)); + return Base64URL.encode(cleanedDetachedPayload.getBytes(StandardCharsets.UTF_8)); + } + + private static JsonMapper getConfiguredJsonMapper() { + return JsonMapper.builder() + .configure(MapperFeature.SORT_PROPERTIES_ALPHABETICALLY, true) + .configure(SerializationFeature.INDENT_OUTPUT, false) + .serializationInclusion(JsonInclude.Include.NON_NULL) + .build(); + } + + ``` + +</TabItem> +<TabItem value="dotnet"> + +**Serialisierung** + +```csharp +var parameterJson = JsonConvert.SerializeObject(route.DestinationParameters, + new JsonSerializerSettings { + NullValueHandling = NullValueHandling.Ignore, + Formatting = Formatting.None, + ContractResolver = new OrderedContractResolver() + }); +``` + +**ContractResolver** + +```csharp +public class OrderedContractResolver : DefaultContractResolver { + protected override System.Collections.Generic.IList<JsonProperty> CreateProperties( + System.Type type, MemberSerialization memberSerialization) { + NamingStrategy = new CamelCaseNamingStrategy(); + return base.CreateProperties(type, memberSerialization).OrderBy(p => p.PropertyName) + .ToList(); + } +} ``` </TabItem> diff --git a/static/images/roadmap/2022-11-24_roadmap.jpg b/static/images/roadmap/2022-11-24_roadmap.jpg deleted file mode 100644 index 6bc1dd948a0d9537df7e51f32a09e53cadb55a09..0000000000000000000000000000000000000000 Binary files a/static/images/roadmap/2022-11-24_roadmap.jpg and /dev/null differ diff --git a/static/images/roadmap/Roadmap-2023_q1-edited.png b/static/images/roadmap/Roadmap-2023_q1-edited.png new file mode 100644 index 0000000000000000000000000000000000000000..9fdd34b5a491b14d0b9d88eff533cf81dc33d5d4 Binary files /dev/null and b/static/images/roadmap/Roadmap-2023_q1-edited.png differ