Guide étape par étape pour déployer AccessPoint dans votre environnement Microsoft 365 et Azure

Last updated: July 12, 2026 by Steve

Guide de déploiement

AccessPoint utilise un modèle de déploiement fractionné : un composant web SPFx léger dans SharePoint, une application Teams qui héberge ce même composant web comme onglet personnel, et un backend Azure qui exécute l'API et stocke toutes les données. Chaque composant est déployé dans votre propre locataire Microsoft 365 et votre propre abonnement Azure — rien n'est hébergé par l'éditeur, et aucune donnée client ne quitte votre environnement.

Aperçu

Composant Où l'obtenir Emplacement de déploiement
Composant web SPFx (accesspoint.sppkg) Microsoft AppSource ou téléversement direct dans votre catalogue d'applications Votre locataire SharePoint Online
Application Teams (accesspoint-teams.zip) Microsoft AppSource ou téléversement dans le Centre d'administration Teams Votre catalogue d'applications Teams
Backend Azure (App Service, SQL, Blob Storage, Application Insights) Modèle Bicep/ARM en un clic depuis le portail Azure (recommandé) ou Bicep scripté + PowerShell Votre abonnement Azure

Pour les clouds souverains/gouvernementaux, l'épinglage de version ou les déploiements scriptés, tous les artefacts sont également publiés à l'adresse https://get.realizer.io/public/accesspoint/latest/.

L'ordre d'installation compte. Installez la solution SharePoint avant qu'un utilisateur n'ouvre l'onglet personnel Teams. L'application Teams charge le composant web SPFx depuis SharePoint dans un iframe — sans cela, les utilisateurs voient une erreur 404 SharePoint à l'intérieur de Teams.

Prérequis

  • Un abonnement AccessPoint actif et une clé API de licence (obtenir AccessPoint)
  • Un abonnement Azure avec des droits Contributeur (ou supérieurs) sur le groupe de ressources cible
  • Un catalogue d'applications SharePoint provisionné dans votre locataire, ainsi que des droits Administrateur SharePoint
  • Administrateur général ou Administrateur d'application dans Entra ID pour l'octroi des autorisations Graph et le consentement de l'administrateur
  • Administrateur Teams (ou administrateur général) pour publier l'application Teams
  • Pour les déploiements scriptés ou manuels : Azure CLI (connecté avec az login en tant qu'utilisateur, et non en tant que principal de service) et le module PnP.PowerShell

Il n'existe aucune dépendance à un niveau de licence Microsoft 365, à Power Platform ou à Dataverse — tout utilisateur ayant accès à SharePoint ou à Teams peut utiliser AccessPoint.

Étape 1 : Déployer les ressources Azure

Cette étape provisionne le backend : un App Service Linux (l'API), une base de données Azure SQL, un espace Blob Storage et Application Insights avec Log Analytics. Les ressources sont nommées {type}-accesspoint-{tenantName} (par exemple, app-accesspoint-contoso) et sont durcies par défaut (TLS 1.3, authentification SQL Entra uniquement, FTPS et authentification de base désactivés).

Option A : Portail Azure (recommandé). Déployez le modèle Bicep/ARM d'AccessPoint en un clic depuis le portail Azure (le bouton Déployer sur Azure). Le formulaire de déploiement recueille votre abonnement et votre groupe de ressources, le nom du locataire (par exemple, contoso tiré de contoso.sharepoint.com), la clé API de licence, le SKU App Service (B1 pour l'évaluation, S1 pour la production standard, P1v3 par défaut), une adresse courriel d'alerte facultative, ainsi qu'un commutateur Accorder les autorisations Graph (activé par défaut ; nécessite le rôle Administrateur d'application). Le paquet de l'API se déploie automatiquement dans l'App Service — après le déploiement, il n'existe aucune dépendance d'exécution envers des services externes.

Déploiement du modèle Bicep/ARM d'AccessPoint dans le portail Azure

Option B : Bicep + PowerShell. Pour les pipelines personnalisés ou un contrôle des changements strict, exécutez le script de déploiement à partir du modèle ARM publié :

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

Le script exécute jusqu'à sept étapes — infrastructure, authentification SQL Entra uniquement, octroi des autorisations Graph, un cycle d'arrêt/démarrage de l'App Service, l'entité de stockage SharePoint (URL de l'API), l'approbation des autorisations API du SPFx et l'installation facultative des applications. Chacune peut être omise indépendamment (-SkipInfrastructure, -SkipGraphPermissions, -SkipSharePoint). Épinglez une version avec -ArtifactBaseUrl "https://get.realizer.io/public/accesspoint/1.0.0" pour des déploiements reproductibles et à intégrité vérifiée (le script vérifie le SHA-256 publié et s'interrompt en cas de non-correspondance).

Pour exécuter vous-même les éléments d'infrastructure :

$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

Octroi des autorisations Graph. L'identité managée de l'App Service a besoin de cinq autorisations d'application Microsoft Graph : Mail.Send, User.ReadBasic.All, TeamsAppInstallation.ReadForUser.All, Application.Read.All et AppCatalog.Read.All. Le modèle les accorde automatiquement (grantGraphPermissions=true, valeur par défaut) lorsque l'utilisateur qui effectue le déploiement dispose du rôle Administrateur d'application ou de l'autorisation AppRoleAssignment.ReadWrite.All. Sinon, accordez-les par la suite :

$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

Vérification : accédez à https://<api-url>/api/health et confirmez une réponse saine.

Étape 2 : Installer les applications AccessPoint

Installez d'abord la solution SharePoint, puis l'application Teams.

Solution SharePoint. Depuis la fiche AppSource, cliquez sur Get it now et approuvez-la dans votre catalogue d'applications SharePoint, déployée à l'échelle du locataire. Vous pouvez aussi la téléverser manuellement (Centre d'administration SharePoint > Plus de fonctionnalités > Applications > Téléverser, cochez « Rendre cette solution disponible pour tous les sites ») ou laisser le script s'en charger.

Solution AccessPoint dans le catalogue d'applications SharePoint

Application Teams. Depuis la fiche AppSource, cliquez sur Get it now et approuvez-la dans le Centre d'administration Teams, ou installez les deux applications via le script (l'utilisateur connecté doit disposer des droits d'administrateur SharePoint ainsi que d'administrateur Teams ou d'administrateur général) :

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

N'utilisez PAS « Synchroniser vers Teams » de SharePoint. Cette fonction remplace silencieusement le webApplicationInfo.id du manifeste, ce qui casse les notifications du fil d'activité Teams. Téléversez l'application Teams directement dans le Centre d'administration Teams.

Vérification : la solution apparaît dans le catalogue d'applications sans erreur, et AccessPoint s'affiche comme Autorisée dans le Centre d'administration Teams > Gérer les applications.

Étape 3 : Approuver les autorisations API

Le paquet SPFx demande des autorisations déléguées qu'un administrateur SharePoint doit approuver. Dans le Centre d'administration SharePoint, allez dans Avancé > Accès API et approuvez chaque demande AccessPoint en attente (access_as_user sur l'API AccessPoint, ainsi que des portées Graph telles que User.Read.All, Sites.Read.All, Files.Read.All, Mail.Read).

Approbation des demandes d'autorisations API AccessPoint

Ou approuvez-les 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
}

Finalement, un administrateur général accorde le consentement de l'administrateur pour l'application multilocataire de l'éditeur en ouvrant https://login.microsoftonline.com/common/adminconsent?client_id=ed19c96c-a7c5-4dca-8b47-0899c406329f dans un navigateur.

Vérification : la page d'accès API n'affiche plus aucune demande AccessPoint en attente.

Étape 4 : Utiliser AccessPoint dans SharePoint ou Teams

SharePoint : modifiez ou créez une page, cliquez sur +, recherchez AccessPoint, ajoutez le composant web, puis publiez.

Teams : les utilisateurs trouvent AccessPoint sous Applications > Conçues pour votre organisation (l'indexation de la recherche peut prendre de 15 minutes à plusieurs heures après la première installation). Vous pouvez aussi l'épingler pour tout le monde via Centre d'administration Teams > Stratégies de configuration des applications, en ajoutant AccessPoint aux Applications installées et aux Applications épinglées.

Étape 5 : Configurer l'URL de l'API

Ouvrez le composant web et allez dans Paramètres > Configuration. Saisissez l'URL de l'API (l'URL de l'App Service issue de l'étape 1, par exemple https://app-accesspoint-contoso.azurewebsites.net) et l'ID client de l'inscription d'application Entra ID de l'API, puis cliquez sur Enregistrer. Le panneau valide le format HTTPS et le format GUID avant l'enregistrement.

Configuration de l'URL de l'API dans le panneau Configuration

Le script de déploiement configure l'entité de stockage SharePoint sous-jacente à votre place. Pour la configurer manuellement :

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

Vérification : rechargez le composant web — le tableau de bord se charge à la place de l'invite de configuration.

Étape 6 : Importer un pack de configuration

Allez dans Paramètres > Packs de configuration, choisissez le pack correspondant à votre juridiction (Canada ATIA, États-Unis FOIA, UE GDPR, et autres), puis cliquez sur Importer. Le pack crée des types de demande, des motifs de prolongation, des champs de choix, des modèles de notification et des traductions. Révisez et personnalisez les éléments importés par la suite.

Étape 7 : Attribuer les rôles utilisateur

Le premier utilisateur à ouvrir AccessPoint se voit automatiquement attribuer les rôles Administrateur et SAO. Allez dans Paramètres > Gérer les utilisateurs, cliquez sur Ajouter un utilisateur, recherchez dans votre annuaire, puis attribuez les rôles : au moins un Administrateur et un SAO, ainsi que les rôles Dépositaire, Contributeur, Réviseur et Lecteur au besoin.

AccessPoint est maintenant prêt à l'emploi.

Déploiement multilocataire

Utilisez ce modèle lorsque le backend Azure réside dans un locataire Entra ID différent de votre locataire Microsoft 365 — par exemple une équipe de services partagés desservant plusieurs unités d'affaires, un fournisseur de services gérés (MSP) hébergeant pour des clients, ou des locataires Azure/M365 distincts pour des raisons de gouvernance. Un déploiement unique peut desservir plusieurs locataires M365 : l'API isole les données selon l'ID du locataire présent dans le jeton de chaque utilisateur, avec des filtres de requête de base de données propres à chaque locataire et des chemins de blob préfixés par locataire. Chaque locataire M365 nécessite tout de même sa propre licence, son propre déploiement SPFx et ses propres approbations d'autorisations API, ainsi que ses propres identifiants Graph et sa propre boîte aux lettres de notification.

Inscription d'application Graph. Une identité managée ne fonctionne que dans son locataire d'origine ; créez donc une inscription d'application monolocataire dans le locataire M365 (par exemple, AccessPoint Graph Connector), accordez-lui les cinq mêmes autorisations d'application Graph énumérées à l'étape 1 avec le consentement de l'administrateur, puis créez un secret client et reliez-le à l'App Service via Key Vault :

# 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

Ne stockez jamais le secret directement dans les paramètres de l'App Service ; l'identité managée de l'App Service a besoin du rôle Key Vault Secrets User sur le coffre. Lorsque les trois paramètres Graph__* sont présents, l'API utilise l'inscription d'application ; lorsqu'ils sont absents, elle se rabat sur l'identité managée pour les déploiements dans le même locataire.

Boîte aux lettres partagée et stratégie d'accès des applications. Créez une boîte aux lettres partagée non licenciée dans le locataire M365 pour les notifications par courriel, et limitez Mail.Send afin que l'application ne puisse envoyer que depuis cette seule boîte aux lettres :

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

Chaque locataire M365 répète ensuite les étapes 2 à 5 (applications, approbations, URL de l'API — la même URL d'API dessert tous les locataires). Les notifications du fil d'activité Teams exigent en outre le consentement de l'administrateur pour l'application d'entreprise Realizer et l'application Teams installée pour les utilisateurs; consultez Configuration initiale pour plus de détails.

Retour arrière et exploitation

Les mécanismes Azure standard couvrent le retour arrière : redéployez un paquet API précédent depuis l'historique du Centre de déploiement de l'App Service, restaurez Azure SQL par restauration à un point dans le temps (jusqu'à 35 jours), et retéléversez une version antérieure du .sppkg dans le catalogue d'applications. Les importations de packs de configuration sont additives et s'annulent par restauration de la base de données. Pour le guide opérationnel complet — procédures de retour arrière détaillées, surveillance et tâches de maintenance — contactez notre équipe de soutien.