Tutorial: Empfangen und antworten
Typ A/B · Verwaltung Dauer: ca. 20 Minuten
Was Sie hier bauen: Ein Programm, das als Verwaltungssystem den Antrag aus
Tutorial 1 abholt, den Prüfbericht ausgibt, den Antrag annimmt und einen
Bescheid als Antwort in denselben Vorgang sendet. Am Ende sehen Sie im Ereignisprotokoll den
signierten Zustand ACCEPTED.
Dieses Tutorial optimiert auf Verstehen. Was für den Betrieb fehlt (Vault statt Datei, Callbacks statt Polling, Locking bei mehreren Instanzen), steht in den Rezepten Anträge abholen und prüfen und Callbacks prüfen.
Voraussetzungen
- Ein Zustellpunkt vom Typ A („Verwaltung“) im Self-Service-Portal (TEST) und ein API-Client mit den Scopes zum Abholen und Antworten.
- Ein Antrag, der an diesen Zustellpunkt gesendet wurde — z. B. aus
Tutorial 1, dessen
submissionIdundcaseIdSie notiert haben. - Das Projekt aus Tutorial 1 (oder ein neues nach demselben Muster).
Schritt 1: Schlüssel erzeugen und hinterlegen
Ein Empfänger braucht zwei private Schlüssel: einen zum Entschlüsseln der Anträge und einen zum Signieren seiner Events (Annahme, Ablehnung, Antwort). Die öffentlichen Hälften laden Sie im Portal am Zustellpunkt hoch. Für TEST erzeugen Sie die Paare lokal:
- Java
- .NET (C#)
JWKPair enc = EncryptionKeyPairGenerator.generate("tutorial-enc");
JWKPair sig = EncryptionKeyPairGenerator.generate("tutorial-sig");
Files.writeString(Path.of("decrypt.jwk"), enc.privateKey().toJSONString());
Files.writeString(Path.of("sign.jwk"), sig.privateKey().toJSONString());
System.out.println(enc.publicKey().toJSONString()); // → Portal: Verschlüsselungsschlüssel
System.out.println(sig.publicKey().toJSONString()); // → Portal: Signaturschlüssel
Alternativ erledigt das die Kommandozeile in einem Schritt: fit-connect keygen --with-config
schreibt beide Paare und eine passende config.yml (siehe
Kommandozeile).
Das .NET-SDK bringt keinen eigenen Schlüsselgenerator mit. Nehmen Sie die Java-Kommandozeile
(fit-connect keygen), das JWK-Tool oder erzeugen
Sie ein RSA-4096-Paar mit .NET-Mitteln und serialisieren es als JWK:
using var rsa = RSA.Create(4096);
var priv = new RsaSecurityKey(rsa) { KeyId = "tutorial-enc" };
string privateJwk = JsonSerializer.Serialize(JsonWebKeyConverter.ConvertFromRSASecurityKey(priv));
// Microsoft.IdentityModel.Tokens; öffentliche Hälfte analog mit rsa.ExportParameters(false)
Die privaten JWKs kommen in die Konfiguration — als User Secret, nicht in appsettings.json:
dotnet user-secrets init
dotnet user-secrets set "FitConnect:Client:DecryptionKeys:0" "$(cat decrypt.jwk)"
dotnet user-secrets set "FitConnect:Client:SignatureKey" "$(cat sign.jwk)"
Regel 4 des Rollenmodells: Schlüssel bestimmen, was Sie öffnen können. Zum Senden brauchten Sie in Tutorial 1 keinen — zum Empfangen brauchen Sie beide. Mehr dazu unter Schlüssel und Rollover.