Insbesondere IP/Domain Whitelisting (https://stripe.com/docs/ips#stripe-domains) könnte wichtig sein, da die Erfahrungen aus dem PoC letztes Jahr gezeigt haben, dass das öffnen der RZ Infrastruktur für Webhook zwar machbar, aber doch sensibel war.
Akzeptanzkriterien
Der Callback soll nur die minimal notwendigen Daten für die Benachrichtigung beinhalten, damit der Client korrekt reagieren kann. Der eigentliche Status ist nicht Teil der Benachrichtigung.
Für Sender und Subscriber gelten die selben Sicherheitsvorgaben.
Zustelldienst muss Zugriff haben
HTTPS-only
Callback-Adressen müssen mit Status-Code 200 antworten
✓
5 of 5 checklist items completed
· Edited by
Marco Holz
@Lilith_Wittmann : Ich hatte mit Marco gestern über meine Überlegungen gesprochen. Wäre es für dich in Ordnung, dass mit zu übernehmen? (Ist relevant für das entsprechende Issue 61)
Wenn wir dazu übergehen sollten, die Antworten des Zustelldienstes zu signieren (hab mir hier deine Vorschläge noch nicht angeschaut), wäre vermutlich eine gleichartige Nutzung der Signatur einschließlich Zertifikaten bei Webhooks sinnvoll, oder?
@Alexander_Hoose ja das ergibt total Sinn. Habe für Signaturen auf schon angefangen, das ein bisschen auszudefinieren und kümmere mich da gerne weiter drum.
Und was man sich bzgl der Daten bei den Webhooks noch überlegen muss, ist ob es wirklich reine Statusupdates mit festgelegten Enums sind oder ob es auch Payload gibt. Den müsste man dann ja konsequenterweise auch verschlüsseln.
Tip, top. Also nach meinen Überlegungen sehe aktuell drei Anwendungsbereiche mit Webhooks:
Updates an empfangende Systeme für neue Anträge
Updates an sendende Systeme für einen neuen Status
Updates an beide Seite über neue Nachrichten, wenn wir die API um einen Rückkanal erweitern
In allen Fällen würde ich gerne der Empfehlung folgen, dass auf die Versendung von Payloads mit sensiblen Daten oder Angriffspotentialen verzichtet wird. In allen Fällen müssten sich also die Systeme mit einem Request dann nochmal die Daten beim eigentlichen Endpunkt abholen.
Wenn Designüberlegungen aber zum Schluss kommen, dass wir den Payload in manchen Fällen doch lieber direkt über den Webhook versenden sollten und einfach E2E verschlüsseln, dann ist es auch in Ordnung. (Ich vermute, dass wir für die Rückkanalerweiterung irgendwo vorsehen werden, dass das sendende System für den Antragsprozess einen Public Key hinterlegt. Design des Rückkanals ist aber aktuell kein Sprint Thema)
Ich habe mal versucht die Wege des Rückkanals zum User zusammenzufassen um nichts zu vergessen:
Es gibt die Grundentscheidung beim übermitteln des Antrags, ob ein verschlüsselter Rückkanal aufgebaut werden soll oder nicht.
Es gibt die Möglichkeit anonym einen webhook/app-id zu konfigurieren, auf der Benachrichtigt wird wenn sich der Status des Antrags ändert (Enum + Zusatzattribute wie schemaID bei Rückfragen - wenn KEIN public key übergeben).
Es gibt die Möglichkeit, verschlüsselt Kontaktmöglichkeiten mitzusenden. Um die Benachrichtigung muss sich dann allerdings die Empfangende Behörde kümmern.
Wenn ein verschlüsselter Rückkanal aufgebaut wird, dann muss ein Public Key mitgeschickt werden und ein ENUM für eine Message, was der User tun muss, um zu entschlüsseln (e.g. bitte scannen sie den QR-Code auf ihrem Antrag) mitgegeben werden. Sollte das passieren, dann gibt es nur noch Benachrichtigungen per Webhooks, mit Verweis das es eine neue Nachricht gibt, die man bitte mit $OPTION abrufen soll. Die abrufbare Nachricht selbst, ist dann eine Text/Richt Text Nachricht, die Verweise auf Dokumente und Schemas im fitconnect Stil enthalten kann. Der public key aus Antrag 1 ermöglicht sicherzustellen, das auch Antrag 2 aus der selben Quelle wie Antrag 1 kommt.
Sollte der User keine Verschlüsselungskey hinterlegen, dann hat man die Möglichkeit ihn über einen Standard-Enums mit angehängtem Schema zu benachrichtigen. erhält er einen langlebigen JWT Token der ihn Antrag 1 zuordnet (?).
Wäre super wenn ihr das nochmal gegenchecken könnten
Um hier etwas die Komplexität rauszunehmen, würde ich die Option eines Rückkanals ohne Hinterlegung eines Public Keys gerne streichen. Bei einem Rückkanal ohne Public Keys liegen Bescheide etc. unverschlüsselt im Zustelldienst (und ggf. in einem Onlinedienst).
Wenn wir tatsächlich die Hinterlegung einer AppId zur Benachrichtigung von Apps via Push-Notification unterstützen wollen, dann sollten wir hierbei die Verwendung des Web Push Protocol in Erwägung ziehen. Insgesamt ist das Thema aber aus meiner Sicht eher etwas für frühestens H2/2021.
Ziel A: API-Clients müssen prüfen können, ob eingehende Callbacks valide sind, d.h. ob diese tatsächlich vom Zustelldienst kommen. Anders ausgedrückt: Sender des Callbacks (Zustelldienst) muss authentisiert sein
Ziel B: Vertraulichkeit des Payloads muss gewährleistet sein
Ziel C: Vermeidung von Replay-Angriffen
Weitere Anforderungen
Anforderung 1: Sender können Callbacks von verschiedenen Zustelldiensten erhalten und müssen Zustelldienste unterscheiden können.
Lösungsmöglichkeit: Callback enthält submissionID. Client kann eine submissionID einem Zustelldienst zuordnen.
Sicherheitsmechanismen
Einfaches Shared Secret
POST /callbackAuthorization: {shared-secret}
Shared Secret wird via HTTP-Header in jedem Callback übergeben
Zoom verwendet authorization-Header: Authorization: {shared_secret}
Firstly, we cannot rely on arguments that the "compiler isn't smart enough to do that" because that may change tomorrow. We need to base our assessment of the code on what the compiler is and isn't allowed to do.
Marco Holzmarked the checklist item Der Callback soll nur die minimal notwendigen Daten für die Benachrichtigung beinhalten, damit der Client korrekt reagieren kann. Der eigentliche Status ist nicht Teil der Benachrichtigung. as completed
marked the checklist item Der Callback soll nur die minimal notwendigen Daten für die Benachrichtigung beinhalten, damit der Client korrekt reagieren kann. Der eigentliche Status ist nicht Teil der Benachrichtigung. as completed
Marco Holzmarked the checklist item Für Sender und Subscriber gelten die selben Sicherheitsvorgaben. as completed
marked the checklist item Für Sender und Subscriber gelten die selben Sicherheitsvorgaben. as completed
Marco Holzmarked the checklist item Zustelldienst muss Zugriff haben as completed
marked the checklist item Zustelldienst muss Zugriff haben as completed
Marco Holzmarked the checklist item HTTPS-only as completed
marked the checklist item HTTPS-only as completed
Marco Holzmarked the checklist item Callback-Adressen müssen mit Status-Code 200 antworten as completed
marked the checklist item Callback-Adressen müssen mit Status-Code 200 antworten as completed