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

Last updated: July 12, 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 en API-licentiesleutel (AccessPoint verkrijgen)
  • 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).

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), licentie-API-sleutel, App Service-SKU (B1 voor evaluatie, S1 voor standaardproductie, P1v3 standaard), een optioneel waarschuwings-e-mailadres, en een schakelaar Graph-machtigingen verlenen (standaard ingeschakeld; vereist Application Administrator). Het API-pakket wordt automatisch geïmplementeerd in de App Service — na implementatie bestaat er geen runtime-afhankelijkheid meer van externe services.

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 doorloopt tot zeven stappen — infrastructuur, uitsluitend Entra SQL-verificatie, verlening van Graph-machtigingen, een stop/start-cyclus van de App Service, de 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/1.0.0" 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

# Disable SQL password auth — Entra ID (managed identity) only
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 vijf Microsoft Graph-toepassingsmachtigingen nodig: Mail.Send, User.ReadBasic.All, TeamsAppInstallation.ReadForUser.All, Application.Read.All en AppCatalog.Read.All. De sjabloon verleent deze automatisch (grantGraphPermissions=true, de standaardinstelling) wanneer de implementerende gebruiker over Application Administrator of AppRoleAssignment.ReadWrite.All beschikt. Zo niet, verleen ze dan achteraf:

$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" }
)

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.

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 zoals User.Read.All, Sites.Read.All, Files.Read.All, Mail.Read).

Goedkeuren van AccessPoint API-machtigingsaanvragen

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" }
)
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 configureren

Open het webonderdeel en ga naar Instellingen > Configuratie. Voer de API-URL in (de App Service-URL uit stap 1, bijvoorbeeld https://app-accesspoint-contoso.azurewebsites.net) en de Client-ID van de Entra ID-app-registratie van de API, en klik vervolgens op Opslaan. Het paneel valideert HTTPS en de GUID-indeling voordat er wordt opgeslagen.

API-URL-configuratie in het configuratiepaneel

Het implementatiescript stelt de onderliggende SharePoint-opslagentiteit voor u in. Om dit handmatig in te stellen:

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

Controleren: herlaad het webonderdeel — het dashboard wordt geladen in plaats van de configuratieprompt.

Stap 6: Een configuratiepakket importeren

Ga naar Instellingen > Configuratiepakketten, 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 rollen Administrator en SAO toegewezen. Ga naar Instellingen > Gebruikers beheren, klik op Gebruiker toevoegen, zoek in uw directory en wijs rollen toe: ten minste één Administrator en één SAO, plus de rollen Custodian, Contributor, Reviewer en Reader waar nodig.

AccessPoint is nu klaar voor gebruik.

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 vijf 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 configuratiepakketten 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.