Stapsgewijze handleiding voor het implementeren van AccessPoint in uw Microsoft 365- en Azure-omgeving

Last updated: August 09, 2026 by Steve

Implementatiehandleiding

AccessPoint gebruikt een gesplitst implementatiemodel: een lichtgewicht SPFx-webonderdeel in SharePoint, een Teams-app die datzelfde webonderdeel als persoonlijk tabblad host, en een Azure-backend die de API uitvoert en alle gegevens opslaat. Elk onderdeel komt terecht in uw eigen Microsoft 365-tenant en Azure-abonnement — niets wordt gehost door de uitgever, en er verlaten geen klantgegevens uw omgeving.

Overzicht

Onderdeel Verkrijgbaar via Komt terecht in
SPFx-webonderdeel (accesspoint.sppkg) Microsoft AppSource of directe upload naar uw appcatalogus Uw SharePoint Online-tenant
Teams-app (accesspoint-teams.zip) Microsoft AppSource of upload naar het Teams-beheercentrum Uw Teams-appcatalogus
Azure-backend (App Service, SQL, Blob Storage, Application Insights) Bicep/ARM-sjabloon met één klik vanuit de Azure-portal (aanbevolen) of gescripte Bicep + PowerShell Uw Azure-abonnement

Voor soevereine/overheidsclouds, versievergrendeling of gescripte implementaties worden alle artefacten ook gepubliceerd op https://get.realizer.io/public/accesspoint/latest/.

De installatievolgorde is belangrijk. Installeer de SharePoint-oplossing voordat een gebruiker het persoonlijke Teams-tabblad opent. De Teams-app laadt het SPFx-webonderdeel vanuit SharePoint in een iframe — zonder deze installatie zien gebruikers een SharePoint 404-pagina binnen Teams.

Vereisten

  • Een actief AccessPoint-abonnement (AccessPoint verkrijgen) — de API activeert de licentie automatisch via de eigen Entra-identiteit, dus is er geen licentiesleutel nodig, tenzij Realizer Support er een voor uw tenant verstrekt
  • Een Azure-abonnement met Contributor-rechten (of hoger) op de doelresourcegroep
  • Een SharePoint-appcatalogus die in uw tenant is ingericht, plus SharePoint Administrator-rechten
  • Global Administrator of Application Administrator in Entra ID voor het verlenen van Graph-machtigingen en beheerderstoestemming
  • Teams Administrator (of Global Admin) om de Teams-app te publiceren
  • Voor gescripte of handmatige implementaties: Azure CLI (aangemeld met az login als gebruiker, niet als service-principal) en de module PnP.PowerShell

Er bestaat geen afhankelijkheid van een bepaald Microsoft 365-licentieniveau, Power Platform of Dataverse — elke gebruiker met toegang tot SharePoint of Teams kan AccessPoint gebruiken.

Stap 1: Azure-resources implementeren

Deze stap richt de backend in: een Linux App Service (de API), Azure SQL Database, Blob Storage en Application Insights met Log Analytics. Resources krijgen de naam {type}-accesspoint-{tenantName} (bijvoorbeeld app-accesspoint-contoso) en zijn standaard versterkt (TLS 1.3, uitsluitend Entra SQL-verificatie, FTPS en basisverificatie uitgeschakeld, Microsoft Defender for SQL standaard ingeschakeld). De SQL-server wordt Entra-first aangemaakt: de implementerende gebruiker wordt de initiële Entra-beheerder en er bestaat nooit een SQL-referentie — er valt dus niets te roteren of uit te schakelen.

Wekelijkse e-mails "Vulnerability Assessment scan completed" die mislukte controles tonen, maar niets in de portal? Te verwachten bij een verse implementatie, geen kwetsbaarheid. Microsoft Defender for SQL voert de klassieke (storage-gebaseerde) Vulnerability Assessment uit, maar het Defender-blad van de Azure-portal staat nu standaard op de nieuwere weergave express configuration, waardoor de link "Resultaten weergeven" in de e-mail kan uitkomen op een weergave zonder scans. De mislukte controles zijn baseline-controles, die mislukken totdat de huidige toestand als de baseline is goedgekeurd — de sjabloon keurt de deterministische controle VA2065 (firewallregels) al vooraf goed, maar een tenant-specifieke controle met lage ernst voor gebruikerstracking op de applicatiedatabase kan niet vooraf worden gedeclareerd. Los dit eenmalig op: open de SQL-server (niet de database) → Microsoft Defender for Cloud → Vulnerability assessment → open de mislukte controle → Approve as baseline → opnieuw Scan → volgende wekelijkse e-mails melden dat alle controles slagen.

Optie A: Azure-portal (aanbevolen). Implementeer de Bicep/ARM-sjabloon van AccessPoint met één klik vanuit de Azure-portal (de knop Implementeren in Azure). Het implementatieformulier verzamelt uw abonnement en resourcegroep, tenantnaam (bijv. contoso uit contoso.sharepoint.com), en een verplicht Implementatietype zonder standaardwaarde: kies Nieuwe installatie voor een eerste implementatie, of Bestaande installatie upgraden wanneer u opnieuw implementeert over een actieve AccessPoint-installatie — bij een upgrade blijven door de beheerder toegevoegde toepassingsinstellingen behouden en blijft de databasetoegang ongewijzigd. Kies optioneel een App Service-SKU (B1 voor evaluatie, S1 voor standaardproductie, P1v3 standaard), een waarschuwings-e-mailadres, en de optionele AI-mogelijkheden hieronder. Laat de licentie-API-sleutel leeg — AccessPoint activeert de licentie automatisch via de Entra-identiteit van de app; voer alleen een waarde in als Realizer Support er een voor uw tenant verstrekt. Het API-pakket wordt automatisch geïmplementeerd in de App Service — na implementatie bestaat er geen runtime-afhankelijkheid meer van externe services.

Finish Setup (Graph-machtigingen). De sjabloon zelf verleent nooit Graph-machtigingen. Open na de implementatie de link finishSetupUrl uit de Outputs van de implementatie en meld u aan als Global Administrator — de Finish Setup-pagina van de uitgever verleent in één idempotente stap alle Graph-machtigingen die de beheerde identiteit nodig heeft. Bezoek dezelfde link opnieuw na een upgrade om nieuw geïntroduceerde machtigingen te verkrijgen. Voer vervolgens een volledige Stop/Start-cyclus uit op de App Service (niet Restart), zodat de machtigingen van kracht worden.

Implementatie van de AccessPoint Bicep/ARM-sjabloon in de Azure-portal

Optie B: Bicep + PowerShell. Voor aangepaste pipelines of strikte wijzigingsbeheerprocedures voert u het implementatiescript uit tegen de gepubliceerde ARM-sjabloon:

Invoke-WebRequest -Uri "https://get.realizer.io/public/accesspoint/latest/Deploy-AccessPoint.ps1" -OutFile "Deploy-AccessPoint.ps1"

# End-to-end: infrastructure, configuration, and both apps
.\Deploy-AccessPoint.ps1 `
    -SharePointSiteUrl "https://contoso.sharepoint.com/sites/accesspoint" `
    -TemplateUri "https://get.realizer.io/public/accesspoint/latest/main.json" `
    -DeploySharePointApp -DeployTeamsApp

Het script detecteert automatisch het implementatietype (nieuwe installatie versus upgrade) en doorloopt tot zeven stappen — infrastructuur, uitsluitend Entra SQL-verificatie (een noodvoorziening: huidige sjablonen maken de server al Entra-first aan), verlening van Graph-machtigingen (het gescripte equivalent van de Finish Setup-pagina), een stop/start-cyclus van de App Service, de optionele SharePoint-opslagentiteit (API-URL), goedkeuring van SPFx API-machtigingen en optionele app-installaties. Elke stap kan afzonderlijk worden overgeslagen (-SkipInfrastructure, -SkipGraphPermissions, -SkipSharePoint). Zet een versie vast met -ArtifactBaseUrl "https://get.realizer.io/public/accesspoint/2.0.67" voor reproduceerbare implementaties met geverifieerde integriteit (het script controleert de gepubliceerde SHA-256-hash en breekt af bij een mismatch).

Om de infrastructuuronderdelen zelf uit te voeren:

$TenantName    = "contoso"
$ResourceGroup = "rg-accesspoint-$TenantName"

az group create --name $ResourceGroup --location "canadacentral"

$deployment = az deployment group create `
    --resource-group $ResourceGroup `
    --template-uri "https://get.realizer.io/public/accesspoint/latest/main.json" `
    --parameters tenantName=$TenantName appServiceSku=P1v3 `
    --output json | ConvertFrom-Json

$appName     = $deployment.properties.outputs.appServiceName.value
$apiUrl      = $deployment.properties.outputs.appServiceUrl.value
$principalId = $deployment.properties.outputs.appServicePrincipalId.value

# Backstop only: current templates create the SQL server Entra-first, so
# Entra-only auth is already in force and no SQL credential ever exists
az sql server ad-only-auth enable --resource-group $ResourceGroup `
    --server-name $deployment.properties.outputs.sqlServerName.value

Verlening van Graph-machtigingen. De beheerde identiteit van de App Service heeft de volgende Microsoft Graph-toepassingsmachtigingen nodig: Mail.Send, User.ReadBasic.All, TeamsAppInstallation.ReadForUser.All, Application.Read.All, AppCatalog.Read.All, en (standaard ingeschakeld, met opt-out) AiEnterpriseInteraction.Read.All voor Copilot-vastlegging. De eenvoudigste weg is de Finish Setup-pagina — de implementatie-output finishSetupUrl — die ze allemaal in één idempotente stap verleent via de gedelegeerde aanmelding van een Global Administrator. Om ze in plaats daarvan via de CLI te verlenen:

$graphSpId = az ad sp show --id "00000003-0000-0000-c000-000000000000" --query id -o tsv

$permissions = @(
    @{ Name = "Mail.Send";                            Id = "b633e1c5-b582-4048-a93e-9f11b44c7e96" }
    @{ Name = "User.ReadBasic.All";                   Id = "97235f07-e226-4f63-ace3-39588e11d3a1" }
    @{ Name = "TeamsAppInstallation.ReadForUser.All"; Id = "9ce09611-f4f7-4abd-a629-a05450422a97" }
    @{ Name = "Application.Read.All";                 Id = "9a5d68dd-52b0-4cc2-bd40-abcf44ac3a30" }
    @{ Name = "AppCatalog.Read.All";                  Id = "e12dae10-5a57-4817-b79d-dfbec5348930" }
    # Copilot capture (tenant-wide) — granted by default; remove this line to opt out:
    @{ Name = "AiEnterpriseInteraction.Read.All";     Id = "839c90ab-5771-41ee-aef8-a562e8487c1e" }
)

foreach ($perm in $permissions) {
    $bodyFile = [System.IO.Path]::GetTempFileName()
    @{ principalId = $principalId; resourceId = $graphSpId; appRoleId = $perm.Id } |
        ConvertTo-Json | Set-Content -Path $bodyFile -Encoding utf8
    az rest --method POST `
        --uri "https://graph.microsoft.com/v1.0/servicePrincipals/$principalId/appRoleAssignments" `
        --body "@$bodyFile" --headers "Content-Type=application/json" --output none
    Remove-Item $bodyFile
}

# Full stop/start (NOT restart) clears the managed identity token cache
az webapp stop  --name $appName --resource-group $ResourceGroup
Start-Sleep -Seconds 10
az webapp start --name $appName --resource-group $ResourceGroup

Controleren: navigeer naar https://<api-url>/api/health en controleer of de respons gezond is.

Optionele AI-mogelijkheden

De sjabloon biedt vier optionele mogelijkheden, waarvan geen enkele vereist is om AccessPoint uit te voeren. AI Assist, AI Search en Document Intelligence staan uit tenzij u ze bij de implementatie inschakelt; de machtiging voor Copilot-vastlegging wordt standaard verleend, maar u kunt zich hiervoor afmelden (het formulier Implementeren in Azure, -p name=value bij az deployment, of de hieronder vermelde schakelaars van Deploy-AccessPoint.ps1 regelen alle vier). Alle AI-resources worden geïmplementeerd in uw eigen Azure-abonnement met verificatie uitsluitend via beheerde identiteit — er verlaten geen klantgegevens uw tenancy, en Microsoft traint er geen modellen op.

  • AI Assist implementeren (Azure OpenAI) — voegt een Azure OpenAI-resource toe aan uw abonnement met verificatie via beheerde identiteit (geen API-sleutels). De facturering is op basis van gebruik, dus een inactieve tenant betaalt ongeveer $0 en een druk bureau geeft doorgaans een enkel bedrag in dollars per maand uit. Door dit te implementeren schakelt u de AI Assist-functies in, die elk afzonderlijk in-/uitschakelbaar zijn onder Instellingen > Functies. Elke AI-output is een suggestie of een bewerkbaar concept — een persoon beslist altijd.
  • AI Search implementeren (deployAiSearch=true) — voegt Azure AI Search toe, zodat het zoekvak Documenten woorden binnen documenten (geëxtraheerde PDF-tekst) matcht, naast namen, typen en tags; wanneer ook AI Assist is geïmplementeerd, ondersteunt het semantisch zoeken. Nieuwe documenten worden automatisch geïndexeerd, en een Administrator-sweep (Instellingen > Configuratie > Zoeken in documentinhoud) indexeert documenten die daaraan voorafgingen.
  • Document Intelligence implementeren (deployDocumentIntelligence=true) — voegt Azure AI Document Intelligence toe voor OCR: bij gescande, alleen-afbeelding-documenten wordt de tekst uitgelezen, zodat ze net als elk ander document meedoen aan zoeken in documentinhoud, duplicaatdetectie, AI-samenvattingen en redactiesuggesties. De facturering is per pagina (ongeveer USD $1,50 per 1.000 pagina's). Zonder deze functie blijven gescande documenten wel vindbaar op naam, type en tags.
  • Machtiging voor Copilot-vastlegging (AiEnterpriseInteraction.Read.All) — deze tenantbrede Graph-machtiging wordt standaard verleend, zodat custodians de Copilot-interactiegeschiedenis meteen kunnen vastleggen via Documenten > Toevoegen vanuit Microsoft 365. De machtiging geldt alleen op toepassingsniveau (Microsoft Graph biedt geen gedelegeerde variant), maar AccessPoint leest uitsluitend de eigen Copilot-geschiedenis van de aangemelde gebruiker. Tenants die het principe van minimale bevoegdheden hanteren, kunnen zich hiervoor afmelden met Deploy-AccessPoint.ps1 -DisableCopilotCapture (of grantCopilotCapturePermission=false op de ARM/Bicep-sjabloon) en kunnen de app-rol op elk moment intrekken in Entra ID; de vijf standaard Graph-machtigingen hierboven blijven ongewijzigd.

Stap 2: AccessPoint-apps installeren

Installeer eerst de SharePoint-oplossing, daarna de Teams-app.

SharePoint-oplossing. Klik vanaf de AppSource-vermelding op Get it now en keur de app goed voor uw SharePoint-appcatalogus, tenantbreed geïmplementeerd. Als alternatief kunt u handmatig uploaden (SharePoint-beheercentrum > Meer functies > Apps > Uploaden, schakel "Deze oplossing beschikbaar maken voor alle sites" in) of het script dit laten doen.

AccessPoint-oplossing in de SharePoint-appcatalogus

Teams-app. Klik vanaf de AppSource-vermelding op Get it now en keur de app goed in het Teams-beheercentrum, of installeer beide apps via het script (de aangemelde gebruiker heeft rechten nodig als SharePoint-beheerder plus Teams-beheerder of Global Admin):

.\Deploy-AccessPoint.ps1 `
    -SharePointSiteUrl "https://contoso.sharepoint.com/sites/accesspoint" `
    -SkipInfrastructure -SkipGraphPermissions `
    -DeploySharePointApp -DeployTeamsApp

Gebruik NIET "Sync to Teams" van SharePoint. Dit overschrijft stilzwijgend de webApplicationInfo.id van het manifest, wat de Teams-activiteitenfeed-meldingen verbreekt. Upload de Teams-app rechtstreeks naar het Teams-beheercentrum.

Controleren: de oplossing verschijnt zonder fouten in de appcatalogus, en AccessPoint wordt weergegeven als Allowed onder Teams Admin Center > Manage apps.

Stap 3: API-machtigingen goedkeuren

Het SPFx-pakket vraagt gedelegeerde machtigingen aan die een SharePoint-beheerder moet goedkeuren. Ga in het SharePoint-beheercentrum naar Geavanceerd > API-toegang en keur elke openstaande AccessPoint-aanvraag goed: access_as_user voor de AccessPoint API, plus Graph-scopes voor de personenkiezers en de vastlegbronnen van Toevoegen-vanuit-Microsoft-365 — User.Read.All, Sites.Read.All, Files.Read.All, Mail.Read en Mail.Read.Shared (eigen en gedeelde/intake-postvakken), Calendars.Read en Calendars.Read.Shared, Chat.Read, ChannelMessage.Read.All, Team.ReadBasic.All, Channel.ReadBasic.All (Teams-chats en -kanalen), en Notes.Read en Notes.Read.All (OneNote). De .Shared-scopes verruimen de toegang nooit op zichzelf — Graph blijft de bestaande Exchange-postvakmachtigingen van elke gebruiker afdwingen.

Goedkeuren van AccessPoint API-machtigingsaanvragen

Het openstaande verzoek geselecteerd, met Goedkeuren en Afwijzen beschikbaar

Of keur goed via PnP PowerShell:

Connect-PnPOnline -Url "https://contoso-admin.sharepoint.com" -Interactive

$spfxPermissions = @(
    @{ Resource = "ed19c96c-a7c5-4dca-8b47-0899c406329f"; Scope = "access_as_user" }
    @{ Resource = "Microsoft Graph"; Scope = "User.Read.All" }
    @{ Resource = "Microsoft Graph"; Scope = "Sites.Read.All" }
    @{ Resource = "Microsoft Graph"; Scope = "Files.Read.All" }
    @{ Resource = "Microsoft Graph"; Scope = "Mail.Read" }
    @{ Resource = "Microsoft Graph"; Scope = "Mail.Read.Shared" }
    @{ Resource = "Microsoft Graph"; Scope = "Calendars.Read" }
    @{ Resource = "Microsoft Graph"; Scope = "Calendars.Read.Shared" }
    @{ Resource = "Microsoft Graph"; Scope = "Chat.Read" }
    @{ Resource = "Microsoft Graph"; Scope = "ChannelMessage.Read.All" }
    @{ Resource = "Microsoft Graph"; Scope = "Team.ReadBasic.All" }
    @{ Resource = "Microsoft Graph"; Scope = "Channel.ReadBasic.All" }
    @{ Resource = "Microsoft Graph"; Scope = "Notes.Read" }
    @{ Resource = "Microsoft Graph"; Scope = "Notes.Read.All" }
)
foreach ($perm in $spfxPermissions) {
    Grant-PnPTenantServicePrincipalPermission -Scope $perm.Scope -Resource $perm.Resource
}

Ten slotte verleent een Global Administrator beheerderstoestemming voor de multi-tenant-app van de uitgever door https://login.microsoftonline.com/common/adminconsent?client_id=ed19c96c-a7c5-4dca-8b47-0899c406329f in een browser te openen.

Controleren: de pagina API-toegang toont geen openstaande AccessPoint-aanvragen meer.

Stap 4: AccessPoint gebruiken in SharePoint of Teams

SharePoint: bewerk of maak een pagina, klik op +, zoek naar AccessPoint, voeg het webonderdeel toe en publiceer.

Teams: gebruikers vinden AccessPoint onder Apps > Built for your org (zoekindexering kan na de eerste installatie 15 minuten tot enkele uren duren). Optioneel kunt u de app voor iedereen vastzetten via Teams Admin Center > App setup policies door AccessPoint toe te voegen aan Installed apps en Pinned apps.

Stap 5: API-URL-configuratie (meestal automatisch)

Het webonderdeel detecteert de API-URL automatisch. De AccessPoint API registreert zijn adres zelf bij het Realizer-platform wanneer het zijn licentie valideert — binnen enkele minuten nadat de App Service is gestart — en het webonderdeel haalt het daar op. In de meeste implementaties hoeft u hier niets te doen.

Controleren: herlaad het webonderdeel — het dashboard wordt geladen in plaats van de configuratieprompt. Als de API zojuist is geïmplementeerd, slaagt de detectie bij het volgende laden van de pagina, na de eerste geslaagde licentievalidatie.

De API-URL handmatig instellen (optioneel)

Dit hebt u alleen nodig om de detectie te overschrijven — bijvoorbeeld om het webonderdeel aan een aangepast domein te koppelen.

Optie A — configuratiepaneel. Open het webonderdeel, ga naar Instellingen > Configuratie, voer de API-URL in (de App Service-URL uit stap 1, bijvoorbeeld https://app-accesspoint-contoso.azurewebsites.net) en klik op Opslaan. Het paneel valideert HTTPS voordat er wordt opgeslagen, en een handmatig ingevoerde URL krijgt voorrang op automatische detectie.

API-URL-configuratie in het configuratiepaneel

Optie B — opslagentiteit (PowerShell). Leg de URL vast in een AccessPoint_ApiUrl-opslagentiteit, die voorrang heeft op de automatische detectie. Sinds januari 2026 blokkeert SharePoint schrijfbewerkingen naar de property bag op de no-script-appcatalogus (berichtencentrum MC1186368), dus moet een SharePoint-beheerder deze eenmalig tenantbreed toestaan voordat de opslagentiteit kan worden weggeschreven:

# One-time (SharePoint admin): allow property-bag updates on no-script sites
Set-SPOTenant -AllowWebPropertyBagUpdateWhenDenyAddAndCustomizePagesIsEnabled $true

Connect-PnPOnline -Url "https://contoso.sharepoint.com" -Interactive
$appCatalogUrl = Get-PnPTenantAppCatalogUrl
Connect-PnPOnline -Url $appCatalogUrl -Interactive   # storage entities live on the App Catalog site

Set-PnPStorageEntity -Key "AccessPoint_ApiUrl" -Value $apiUrl -Description "AccessPoint API base URL"
Get-PnPStorageEntity -Key "AccessPoint_ApiUrl"       # verify

Stap 6: Een rechtsgebiedpakket importeren

Ga naar Instellingen > Rechtsgebiedpakketten, kies het pakket voor uw rechtsgebied (Canada ATIA, US FOIA, EU GDPR en andere) en klik op Importeren. Het pakket maakt aanvraagtypen, verlengingsredenen, keuzevelden, meldingssjablonen en vertalingen aan. Controleer en pas de geïmporteerde items achteraf naar wens aan.

Stap 7: Gebruikersrollen toewijzen

De eerste gebruiker die AccessPoint opent, krijgt automatisch de rol Administrator toegewezen — de enige ingebouwde rol, die altijd resulteert in alle machtigingen. Elke andere rol wordt door de tenant zelf gedefinieerd: het importeren van een rechtsgebiedpakket zaait kant-en-klare rollen (zoals Request Coordinator, de facto de rol van toegangs- en privacyfunctionaris), en u kunt deze onder Instellingen > Rollen & machtigingen hernoemen of anders inrichten. Ga naar Instellingen > Gebruikers beheren, klik op Gebruiker toevoegen, zoek in uw directory en wijs ten minste één Administrator en één coördinator toe; toegang als Custodian, Contributor, Reviewer en Reader volgt automatisch uit het werk dat u aan mensen toewijst.

AccessPoint is nu klaar voor gebruik.

AccessPoint bijwerken

AccessPoint laat u weten wanneer er een nieuwere versie beschikbaar is — nergens op abonneren of handmatig peilen nodig:

  • Tijdens de routinematige licentievalidatie meldt het Realizer-platform de nieuwste gepubliceerde AccessPoint-versie (de versie die het meest recent naar het releasekanaal voor klanten is gepromoveerd). Er zijn geen gebruiks- of dossiergegevens bij deze controle betrokken.
  • Wanneer de gepubliceerde versie nieuwer is dan de versie waarop uw API draait, zien beheerders een melding Update beschikbaar op het dashboard en in Configuratie, met de huidige en de nieuwste versienummers.
  • Wanneer u actueel bent (of een pre-releasebuild draait die nieuwer is dan de gepubliceerde release), toont Configuratie "Uw AccessPoint-API is up-to-date."

Een update toepassen:

  1. Klik in Instellingen > Configuratie op Update implementeren in Azure. Dit opent de Azure-portal met de nieuwste ARM-sjabloon — dezelfde sjabloon die voor de initiële implementatie wordt gebruikt.
  2. Kies het implementatietype Bestaande installatie upgraden. Hierbij blijven door de beheerder toegevoegde toepassingsinstellingen behouden en blijft de databasetoegang ongewijzigd; het databaseschema wordt automatisch geüpgraded bij het opstarten van de API (DacPac-migratie).
  3. Werk het SPFx-pakket bij: upload de nieuwste accesspoint.sppkg naar uw appcatalogus (stap 2 hierboven). Werk het Teams-app-pakket bij in het Teams-beheercentrum als er een nieuwe accesspoint-teams.zip is uitgebracht.
  4. Bezoek de pagina Finish Setup opnieuw na het upgraden — deze verleent idempotent alle Graph-machtigingen die sinds uw oorspronkelijke implementatie zijn geïntroduceerd.

Voorbeeldgegevens voor evaluatietenants. Voor demo- en evaluatieomgevingen kan een apart AccessPoint DevTools-webonderdeel (accesspoint-devtools.sppkg) een tenant resetten en voorbeeldgegevens zaaien die passen bij het rechtsgebied — proefgebruikers, aanvragen, toewijzingen en gegenereerde documenten — met één klik op Demo opnieuw opbouwen. Het hergebruikt de API-verbinding van de hoofdapp en declareert zijn eigen API-machtigingen (eenmalig goed te keuren onder SharePoint Admin > Geavanceerd > API-toegang). Niet voor productie: de destructieve reset-eindpunten worden alleen geactiveerd wanneer de App Service-instelling DevTools:Enabled=true is ingesteld — implementeer het pakket uitsluitend naar ontwikkel-/demotenants.

Teams-meldingen en gegevensprivacy (optioneel)

Alle verzoekrecords, PII van verzoekers, documenten en auditgeschiedenis bevinden zich uitsluitend in uw eigen tenant. Meldingen respecteren dat evenzeer. AccessPoint bezorgt elke melding op maximaal drie kanalen, en twee daarvan verlaten uw tenant nooit: de in-app-feed (bediend vanuit uw eigen API) en e-mail/Outlook (verzonden vanuit uw eigen gedeelde postvak via Mail.Send). De Teams-activiteitenfeed is het enige kanaal dat in de standaardmodus een klein bericht POST't naar de Realizer Platform API — die alleen bestaat omdat Microsoft Graph vereist dat een activiteitsmelding wordt verzonden door de app die het Teams-manifest bezit. De uitgever slaat er niets van op en registreert alleen de ontvanger- en tenant-GUID's, en dezelfde meldingen komen nog steeds per e-mail en in-app binnen. Twee instellingen verscherpen dit nog verder, of verwijderen het zelfs volledig:

Minimaliseren (een schakelaar). Schakel onder Instellingen > Initiële configuratie > Teams-meldingen de optie Inhoud van Teams-meldingen minimaliseren (privacy) in. De doorgestuurde payload vervangt vervolgens de titel/voorbeeldtekst van de melding en de naam van de handelende gebruiker door neutrale plaatsvervangers, zodat er geen toewijzings-/taaknamen, meldingstekst of persoonsnamen de tenant verlaten — alleen het activiteitstype, verzoeknummer en de recordidentificatoren gaan nog mee, zodat de melding kan worden gerouteerd en diep gelinkt. De volledige tekst blijft zichtbaar in de in-app-feed. Geen manifestwijziging vereist. (Onder de motorkap: de tenantinstelling Notifications:TeamsMinimalPayload.)

Elimineren (de relay zelf hosten). Een tenant die geen meldingsgegevens naar de uitgever mag sturen, kan zijn eigen API rechtstreeks Graph laten aanroepen met de eigen beheerde identiteit, zodat niets api.realizer.io bereikt:

  1. Verleen TeamsActivity.Send (applicatie) aan de beheerde identiteit van de API en geef er beheerderstoestemming voor — Graph staat alleen de app die het Teams-manifest bezit toe om activiteitsmeldingen te verzenden, dus de verzendende identiteit moet overeenkomen met de webApplicationInfo.id van het manifest.
  2. Wijs het Teams-manifest naar uw eigen app. Stel in manifest.json de waarde webApplicationInfo.id in op uw API-app-registratie-/beheerde-identiteits-client-ID (ter vervanging van de app-id van de uitgever), en laat webApplicationInfo.resource staan op het SharePoint-sitedomein. Upload de bewerkte zip rechtstreeks in Teams Admin Center — gebruik niet de SharePoint-functie "Sync to Teams" (die overschrijft webApplicationInfo).
  3. Schakel de API over naar Direct-relay — voeg de App Service-instelling Notifications__TeamsRelayMode=Direct toe (standaard/niet ingesteld = Publisher) en herstart. De API roept nu zelf sendActivityNotification aan; de toestemming voor de enterprise-app van de uitgever is niet langer nodig voor meldingen.
  4. Valideer opnieuw — verstuur een testmelding (bevestig dat deze deep-linkt) en controleer of het persoonlijke Teams-tabblad nog steeds aanmeldt, aangezien u webApplicationInfo.id hebt gewijzigd.

Direct-relay houdt 100% van de meldingsinhoud binnen de tenant, maar betekent dat u een aangepast Teams-manifest moet onderhouden en opnieuw toestemming moet geven wanneer de app-id verandert. De meeste tenants die alleen vrije tekst en persoonsnamen willen onderdrukken, kunnen in plaats daarvan beter de schakelaar Minimaliseren gebruiken — geen manifestwijziging, en de melding blijft deep-linken.

Multi-tenant-implementatie

Gebruik dit patroon wanneer de Azure-backend zich in een andere Entra ID-tenant bevindt dan uw Microsoft 365-tenant — bijvoorbeeld een shared-services-team dat meerdere bedrijfsonderdelen bedient, een MSP die voor klanten host, of gesplitste Azure/M365-tenants om governance-redenen. Eén implementatie kan meerdere M365-tenants bedienen: de API isoleert gegevens aan de hand van de tenant-ID in het token van elke gebruiker, met tenant-gebonden databasequeryfilters en tenant-voorvoegsels in blob-paden. Elke M365-tenant heeft nog steeds een eigen licentie nodig, een eigen SPFx-implementatie en API-machtigingsgoedkeuringen, en eigen Graph-referenties en een eigen meldingenpostvak.

Graph-app-registratie. Een beheerde identiteit werkt alleen in de eigen thuistenant, dus maakt u een single-tenant app-registratie aan in de M365-tenant (bijv. AccessPoint Graph Connector), verleent u er met beheerderstoestemming dezelfde Graph-toepassingsmachtigingen aan die in stap 1 zijn vermeld, en maakt u vervolgens een clientgeheim aan dat u via Key Vault koppelt aan de App Service:

# In the M365 tenant: create the client secret
$secret = az ad app credential reset --id $appId --display-name "AccessPoint" --years 2 --query password -o tsv

# In the Azure subscription: store the secret and reference it from the App Service
az keyvault secret set --vault-name $vaultName --name "GraphClientSecret" --value $secret

az webapp config appsettings set --resource-group $ResourceGroup --name $appName --settings `
    "Graph__TenantId=$m365TenantId" `
    "Graph__ClientId=$appId" `
    "Graph__ClientSecret=@Microsoft.KeyVault(SecretUri=https://$vaultName.vault.azure.net/secrets/GraphClientSecret)"

az webapp restart --resource-group $ResourceGroup --name $appName

Sla het geheim nooit rechtstreeks op in de App Service-instellingen; de beheerde identiteit van de App Service heeft de rol Key Vault Secrets User nodig voor de Key Vault. Wanneer alle drie de Graph__*-instellingen aanwezig zijn, gebruikt de API de app-registratie; ontbreken ze, dan valt de API terug op de beheerde identiteit voor implementaties binnen dezelfde tenant.

Gedeeld postvak en toepassingstoegangsbeleid. Maak een ongelicentieerd gedeeld postvak aan in de M365-tenant voor e-mailmeldingen, en beperk Mail.Send zodat de app alleen vanuit dat ene postvak kan verzenden:

Connect-ExchangeOnline -Organization "contoso.onmicrosoft.com"

New-Mailbox -Name "AccessPoint Notifications" -Alias "accesspoint-noreply" -Shared

New-DistributionGroup -Name "AccessPoint Mail Senders" -Type Security -ManagedBy "admin@contoso.com"
Add-DistributionGroupMember -Identity "AccessPoint Mail Senders" -Member "accesspoint-noreply@contoso.com"

New-ApplicationAccessPolicy -AppId $appId -PolicyScopeGroupId "AccessPoint Mail Senders" `
    -AccessRight RestrictAccess -Description "AccessPoint may send only from the shared mailbox"

# Verify (propagation can take up to 30 minutes)
Test-ApplicationAccessPolicy -AppId $appId -Identity "accesspoint-noreply@contoso.com"   # expect: Granted
Test-ApplicationAccessPolicy -AppId $appId -Identity "someother@contoso.com"             # expect: Denied

Elke M365-tenant doorloopt vervolgens de stappen 2–5 opnieuw (apps, goedkeuringen, API-URL — dezelfde API-URL bedient alle tenants). Teams-activiteitenfeedmeldingen vereisen bovendien beheerderstoestemming voor de Realizer-bedrijfstoepassing en de voor gebruikers geïnstalleerde Teams-app; zie Initiële configuratie voor meer informatie.

Terugdraaien en beheer

Standaard Azure-mechanismen dekken het terugdraaien: herimplementeer een eerder API-pakket vanuit de geschiedenis van het Implementatiecentrum van de App Service, herstel Azure SQL met een herstel naar een tijdstip (tot 35 dagen terug), en upload een eerdere versie van het .sppkg-bestand opnieuw naar de appcatalogus. Het importeren van rechtsgebiedpakketten is additief en wordt teruggedraaid via een databaseherstel. Voor het volledige operationele draaiboek — gedetailleerde terugdraaiprocedures, monitoring en onderhoudstaken — neemt u contact op met ons ondersteuningsteam.