[{"data":1,"prerenderedAt":83},["ShallowReactive",2],{"search-de":3,"content-de-developer\u002Fdecisions\u002F052-connected-apps-and-signed-hooks":4,"surround-de-\u002Fdeveloper\u002Fdecisions\u002F052-connected-apps-and-signed-hooks":74},[],{"id":5,"title":6,"body":7,"description":66,"extension":67,"meta":68,"navigation":69,"path":70,"seo":71,"stem":72,"__hash__":73},"content_de\u002F3.developer\u002Fdecisions\u002F15.052-connected-apps-and-signed-hooks.md","ADR-052: Connected Apps und signierte Hooks",{"type":8,"value":9,"toc":59},"minimark",[10,27,32,36,40,43,46,50],[11,12,13,21],"ul",{},[14,15,16,20],"li",{},[17,18,19],"strong",{},"Status:"," Angenommen",[14,22,23,26],{},[17,24,25],{},"Datum:"," 2026-07-18",[28,29,31],"h2",{"id":30},"kontext","Kontext",[33,34,35],"p",{},"Manche Integrationen müssen unabhängig von Owlat deployt werden und können weder innerhalb von Convex noch im Nuxt-Bundle laufen. Ihre Netzwerkantworten, Zugangsdaten und Endpunkte sind nicht vertrauenswürdig und benötigen eine engere Grenze als beliebige Callbacks.",[28,37,39],{"id":38},"entscheidung","Entscheidung",[33,41,42],{},"Eine Connected App ist an genau ein gebündeltes Plugin, an explizite Capabilities und an plugin-gescopte API-Keys gebunden. Gemeinsame Hook-Secrets werden mit einem CSPRNG erzeugt, mit AES-256-GCM unter einem per HKDF abgeleiteten Schlüssel versiegelt, einmalig angezeigt und niemals von einer Query zurückgegeben.",[33,44,45],{},"Synchrone Draft-, Gate- und Score-Hooks verwenden domänenseparierte HMAC-SHA256-Signaturen über den exakten Body und die Request-Metadaten. Nonces verhindern Replays; die Verifikation erfolgt in konstanter Zeit. Endpunktvalidierung und abgesicherte Fetches schützen vor privaten Zielen, DNS-Rebinding und unsicheren Redirects. Deaktivierung oder Widerruf wird vor jeder Operation geprüft, und ein Widerruf greift kaskadierend auf plugin-gebundene API-Keys durch.",[28,47,49],{"id":48},"konsequenzen","Konsequenzen",[33,51,52,53,58],{},"Connected Apps können Owlat erweitern, ohne einen Convex-Kontext oder Deployment-Secrets zu erhalten. Netzwerkunsicherheit schlägt in die sichere Richtung fehl, Zustell-Logs sind mandantengescopt und redigiert, und ausschließlich einschränkende Gate-Antworten können keinen Versand freigeben. Siehe ",[54,55,57],"a",{"href":56},"\u002Fdeveloper\u002Fplugin-connected-apps","Connected Apps",".",{"title":60,"searchDepth":61,"depth":61,"links":62},"",2,[63,64,65],{"id":30,"depth":61,"text":31},{"id":38,"depth":61,"text":39},{"id":48,"depth":61,"text":49},"Integrationen der Stufe 2 nutzen plugin-gebundene Zugangsdaten und replay-resistente, fail-closed arbeitende synchrone Hooks.","md",{},true,"\u002Fdeveloper\u002Fdecisions\u002F052-connected-apps-and-signed-hooks",{"title":6,"description":66},"3.developer\u002Fdecisions\u002F15.052-connected-apps-and-signed-hooks","uu1GbWMKjItd4t0mNRe6yjIrbVxSSGGxkFUxBd2-95M",[75,79],{"title":76,"path":77,"stem":78,"children":-1},"ADR-051: Geordnete, ausschließlich einschränkende Autonomie-Gates","\u002Fdeveloper\u002Fdecisions\u002F051-ordered-autonomy-gates","3.developer\u002Fdecisions\u002F14.051-ordered-autonomy-gates",{"title":80,"path":81,"stem":82,"children":-1},"ADR-053: Sandboxed Plugin-Jobs","\u002Fdeveloper\u002Fdecisions\u002F053-sandboxed-plugin-jobs","3.developer\u002Fdecisions\u002F16.053-sandboxed-plugin-jobs",1786915115111]