Naar hoofdinhoud gaan

Manifest van een aangepaste app

Schema-id: custom-app-manifest@1 Machineleesbaar schema: custom-app-manifest.schema.json

De canonieke beschrijving van een aangepaste React-app (sectie 6.3): de Module Federation-remote die de Platformshell in een omgeving laadt voor een zelfgeschreven app. Een manifest wordt op dezelfde manier gevalideerd, of het nu wordt geregistreerd via het Beheercentrum, wordt ingediend met een rechtstreekse API-aanroep, door een AI-assistent is gegenereerd of in een oplossingsimport wordt meegenomen — de regel van één validatiepad (sectie 6.7).

Structuur​

VeldTypeVerplichtOpmerkingen
logicalNametekenreeksjaMet uitgeversvoorvoegsel, in kleine letters snake_case (bijv. par_sales_dashboard). Gebruikt als stabiele artefact-id van de app — de audience van zijn App Context Token.
displayNametekenreeksjaLeesbare naam die op de startpagina van de shell wordt getoond.
descriptiontekenreeks | nullneeKorte beschrijving die op de tegel van de app wordt getoond.
entryFileNametekenreeksneeHet startbestand van de container in het pakket (bijv. remoteEntry.js), overgenomen uit het eigen manifest van het archief. Leeg in Hosted-modus, die geen pakket heeft.
packageHashtekenreeks | nullneeSHA-256 in hexadecimale kleine letters van het archief waaruit deze app is geregistreerd. Null in Hosted-modus. Bij een oplossingsimport wordt het gecontroleerd tegen de bytes die in het pakket zijn meegereisd, zodat wat wordt geserveerd ook is wat is geëxporteerd.
remoteEntryUrltekenreeksjaOfwel een absolute http(s)-URL van de remoteEntry.js van de remote (Hosted-modus — de origin moet op de allowlist van de shell voor de omgeving staan, sectie 6.3), ofwel een verwijzing webresource:<logicalName> (Packaged-modus, sectie 6.15) — de bundel is opgeslagen als webresources en wordt door het platform geserveerd; de shell zet de verwijzing om naar een serveer-URL van het platform en behandelt haar als first-party.
scopetekenreeksjaDe globale scopenaam van de Module Federation-container (uniek per remote), gelijk aan federation({ name }) van de remote.
moduletekenreeksjaHet pad van de beschikbaar gestelde module die de shell laadt (bijv. ./App). Moet met ./ beginnen.
requestedScopestekenreeks[]jaScopes waarvan de app declareert dat hij ze nodig heeft; aangevraagd wanneer zijn App Context Token wordt aangemaakt en doorsneden met die van de gebruiker zelf. Mag leeg zijn.
declaredEntitiestekenreeks[]jaTabellen waarvan de app declareert dat hij ze gebruikt, voor review en afhankelijkheidsvalidatie. Mag leeg zijn.

Waar het wordt gevalideerd​

  • Registratie — de Application Layer valideert het manifest tegen custom-app-manifest@1 en dwingt af dat logicalName begint met het voorvoegsel van de eigenaar-uitgever, voordat de app in een omgeving wordt vastgelegd.
  • Oplossingsimport — elk ingesloten manifest in een oplossingspakket wordt opnieuw gevalideerd tegen hetzelfde schema voordat de app in de doelomgeving wordt geregistreerd, zodat een met de hand bewerkt pakket geen ongeldige remote kan binnensmokkelen.

Beveiligingsopmerkingen​

Een aangepaste React-app draait in hetzelfde JavaScript-realm als de shell (Module Federation, geen iframe — sectie 6.3), dus de vertrouwensgrens wordt elders afgedwongen: de origin van remoteEntryUrl moet voor de omgeving op de allowlist staan (CSP), de app kan alleen worden geladen als een oplossing hem in die omgeving heeft uitgerold, en elke gegevensaanroep die hij via de Runtime SDK doet, wordt aan de serverkant geautoriseerd tegen de scopes in zijn App Context Token. Een scope declareren in requestedScopes kent die nooit toe — hij wordt doorsneden met wat de gebruiker al heeft.

Gerelateerd​

  • Naslag van de Runtime SDK (hoe een aangepaste app useParswareRuntime() gebruikt).
  • Oplossingspakket — neemt deze manifesten tussen omgevingen mee in zijn array customApps.