Guide étape par étape pour déployer AccessPoint dans votre environnement Microsoft 365 et Azure
Last updated: August 09, 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 (obtenir AccessPoint) — l'API active automatiquement sa licence à l'aide de son identité Entra, de sorte qu'aucune clé de licence n'est nécessaire, sauf si le soutien Realizer vous en fournit une pour votre locataire
- 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 loginen 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, Microsoft Defender pour SQL activé par défaut). Le serveur SQL est créé d'emblée en authentification Entra : l'utilisateur qui effectue le déploiement devient l'administrateur Entra initial et aucun identifiant SQL n'existe jamais — il n'y a rien à faire pivoter ni à désactiver.
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), ainsi qu'un type de déploiement obligatoire, sans valeur par défaut : choisissez Nouvelle installation pour un premier déploiement, ou Mise à niveau d'une installation existante lors d'un redéploiement par-dessus une instance AccessPoint déjà en service — la posture de mise à niveau préserve les paramètres d'application ajoutés par l'opérateur et laisse l'accès à la base de données intact. Choisissez éventuellement un SKU d'App Service (B1 pour l'évaluation, S1 pour la production standard, P1v3 par défaut), une adresse courriel d'alerte, ainsi que les capacités d'IA facultatives ci-dessous. Laissez la clé API de licence vide — AccessPoint active automatiquement sa licence à l'aide de l'identité Entra de l'application; ne saisissez une valeur que si le soutien Realizer vous en fournit une pour votre locataire. 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.
Terminer la configuration (autorisations Graph). Le modèle lui-même n'accorde jamais les autorisations Graph. Après le déploiement, ouvrez le lien finishSetupUrl depuis les sorties (Outputs) du déploiement et connectez-vous en tant qu'administrateur général — la page Terminer la configuration de l'éditeur accorde en une seule passe idempotente toutes les autorisations Graph dont l'identité managée a besoin. Revisitez le même lien après une mise à niveau pour récupérer les autorisations nouvellement introduites. Effectuez ensuite un cycle complet d'arrêt/démarrage de l'App Service (pas un redémarrage) pour que les autorisations prennent effet.

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 détecte automatiquement le type de déploiement (nouvelle installation ou mise à niveau) et exécute jusqu'à sept étapes — infrastructure, authentification SQL Entra uniquement (une mesure de repli : les modèles actuels créent le serveur d'emblée en authentification Entra), octroi des autorisations Graph (l'équivalent scripté de la page Terminer la configuration), un cycle d'arrêt/démarrage de l'App Service, l'entité de stockage SharePoint facultative (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/2.0.67" 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
# 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
Octroi des autorisations Graph. L'identité managée de l'App Service a besoin des autorisations d'application Microsoft Graph suivantes : Mail.Send, User.ReadBasic.All, TeamsAppInstallation.ReadForUser.All, Application.Read.All, AppCatalog.Read.All, ainsi que (activée par défaut, avec possibilité de désengagement) AiEnterpriseInteraction.Read.All pour la capture Copilot. La façon la plus simple consiste à utiliser la page Terminer la configuration — la sortie de déploiement finishSetupUrl — qui accorde toutes ces autorisations en une seule passe idempotente à l'aide de la connexion déléguée d'un administrateur général. Pour les accorder par CLI à la place :
$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
Vérification : accédez à https://<api-url>/api/health et confirmez une réponse saine.
Capacités d'IA facultatives
Le modèle expose quatre capacités facultatives, dont aucune n'est requise pour faire fonctionner AccessPoint. L'Assistance IA, AI Search et Document Intelligence sont désactivées à moins que vous ne les activiez au moment du déploiement; la permission de capture Copilot est accordée par défaut, mais vous pouvez vous en désengager (le formulaire Déployer sur Azure, -p name=value sur az deployment, ou les commutateurs Deploy-AccessPoint.ps1 indiqués ci-dessous permettent de contrôler les quatre). Toutes les ressources d'IA sont déployées dans votre propre abonnement Azure avec une authentification exclusivement par identité managée — aucune donnée client ne quitte votre locataire, et Microsoft n'entraîne pas ses modèles sur celle-ci.
- Déployer l'Assistance IA (Azure OpenAI) — ajoute une ressource Azure OpenAI à votre abonnement, avec authentification par identité managée (sans clés d'API). La facturation se fait à l'utilisation : un locataire inactif paie donc environ 0 $, et un service très actif dépense généralement quelques dollars par mois (un montant à un chiffre). Son déploiement active les fonctionnalités de l'Assistance IA, chacune pouvant être activée ou désactivée individuellement sous Paramètres > Fonctionnalités. Chaque sortie de l'IA est une suggestion ou un brouillon modifiable — c'est toujours une personne qui décide.
- Déployer AI Search (
deployAiSearch=true) — ajoute Azure AI Search afin que la zone de recherche des Documents trouve des mots à l'intérieur des documents (texte extrait des PDF), en plus des noms, des types et des étiquettes; lorsque l'Assistance IA est également déployée, elle prend en charge la recherche sémantique. Les nouveaux documents sont indexés automatiquement, et un balayage effectué par un administrateur (Paramètres > Configuration > Recherche dans le contenu des documents) indexe ceux qui lui sont antérieurs. - Déployer Document Intelligence (
deployDocumentIntelligence=true) — ajoute Azure AI Document Intelligence pour l'OCR : les documents numérisés composés uniquement d'images voient leur texte extrait, de sorte qu'ils participent à la recherche dans le contenu, à la détection des doublons, aux résumés générés par l'IA et aux suggestions de caviardage, comme tout autre document. La facturation se fait à la page (environ 1,50 $US pour 1 000 pages). Sans cela, les documents numérisés continuent de correspondre par nom, type et étiquette. - Permission de capture Copilot (
AiEnterpriseInteraction.Read.All) — cette permission Graph à l'échelle du locataire est accordée par défaut, afin que les Custodian puissent capturer l'historique des interactions Copilot d'emblée via Documents > Ajouter depuis Microsoft 365. Les locataires appliquant le principe du moindre privilège peuvent s'en désengager avec-DisableCopilotCapturesur le script de déploiementDeploy-AccessPoint.ps1(ougrantCopilotCapturePermission=falsesur le modèle ARM/Bicep) et peuvent révoquer le rôle d'application dans Entra ID à tout moment. Il s'agit d'une permission d'application uniquement (Microsoft Graph n'offre aucune variante déléguée), mais AccessPoint ne lit jamais que l'historique Copilot de l'utilisateur connecté lui-même; les cinq permissions Graph standard ci-dessus ne sont pas touchées.
É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.

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.iddu 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 les portées Graph pour les sélecteurs de personnes et les sources de capture Ajouter depuis Microsoft 365 — User.Read.All, Sites.Read.All, Files.Read.All, Mail.Read et Mail.Read.Shared (boîtes aux lettres propres et partagées/de prise en charge), Calendars.Read et Calendars.Read.Shared, Chat.Read, ChannelMessage.Read.All, Team.ReadBasic.All, Channel.ReadBasic.All (clavardages et canaux Teams), ainsi que Notes.Read et Notes.Read.All (OneNote). Les portées .Shared n'élargissent jamais l'accès à elles seules — Graph continue d'appliquer les permissions Exchange existantes de chaque utilisateur sur sa boîte aux lettres.


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" }
@{ 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
}
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 : Configuration de l'URL de l'API (généralement automatique)
Le composant web découvre automatiquement l'URL de l'API. L'API AccessPoint enregistre elle-même son adresse auprès de la plateforme Realizer lorsqu'elle valide sa licence — dans les minutes qui suivent le démarrage de l'App Service — et le composant web la récupère à cet endroit. Dans la plupart des déploiements, il n'y a rien à faire ici.
Vérification : rechargez le composant web — le tableau de bord se charge à la place de l'invite de configuration. Si l'API vient d'être déployée, la découverte réussit au prochain chargement de page, après la première validation de licence réussie.
Configurer l'URL de l'API manuellement (facultatif)
Cette étape n'est nécessaire que pour remplacer la découverte automatique — par exemple, pour épingler le composant web à un domaine personnalisé.
Option A — Panneau Configuration. Ouvrez le composant web, 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), puis cliquez sur Enregistrer. Le panneau valide le format HTTPS avant l'enregistrement, et une URL saisie manuellement a priorité sur la découverte automatique.

Option B — Entité de stockage (PowerShell). Épinglez l'URL dans une entité de stockage AccessPoint_ApiUrl, qui a priorité sur la découverte automatique. Depuis janvier 2026, SharePoint bloque les écritures dans l'ensemble de propriétés (property bag) du catalogue d'applications sans script (centre de messages MC1186368) ; un administrateur SharePoint doit donc les autoriser une seule fois, à l'échelle du locataire, avant que l'entité de stockage puisse être écrite :
# 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
Étape 6 : Importer un paquet de juridiction
Allez dans Paramètres > Paquets de juridiction, choisissez le paquet correspondant à votre juridiction (Canada ATIA, États-Unis FOIA, UE GDPR, et autres), puis cliquez sur Importer. Le paquet 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 le rôle Administrateur — le seul rôle intégré, qui résout toujours vers l'ensemble des permissions. Tout autre rôle est défini par le locataire : l'importation d'un paquet de juridiction préremplit des rôles prêts à l'emploi (comme Coordonnateur des demandes, le rôle faisant office d'agent de l'accès et de la protection de la vie privée), que vous pouvez renommer ou remodeler sous Paramètres > Rôles et permissions. Allez dans Paramètres > Gérer les utilisateurs, cliquez sur Ajouter un utilisateur, recherchez dans votre annuaire, puis attribuez au moins un Administrateur et un coordonnateur; les accès Dépositaire, Contributeur, Réviseur et Lecteur découlent automatiquement du travail que vous assignez aux personnes.
AccessPoint est maintenant prêt à l'emploi.
Mise à jour d'AccessPoint
AccessPoint vous avertit lorsqu'une nouvelle version est disponible — il n'y a rien à quoi s'abonner ni à interroger manuellement :
- Lors de la validation de licence de routine, la Plateforme Realizer signale la dernière version publiée d'AccessPoint (la version la plus récemment promue au canal de diffusion client). Aucune donnée d'utilisation ou de dossier n'intervient dans cette vérification.
- Lorsque la version publiée est plus récente que celle exécutée par votre API, les administrateurs voient un avis Mise à jour disponible sur le tableau de bord et dans Configuration initiale, indiquant les numéros de version actuelle et la plus récente.
- Lorsque vous êtes à jour (ou que vous exécutez une version préliminaire plus récente que la version publiée), Configuration initiale affiche « Votre API AccessPoint est à jour. »
Pour appliquer une mise à jour :
- Dans Paramètres > Configuration, cliquez sur Déployer la mise à jour sur Azure. Cela ouvre le portail Azure avec le dernier modèle ARM — le même modèle utilisé pour le déploiement initial.
- Choisissez le type de déploiement Mise à niveau d'une installation existante. Cela préserve les paramètres d'application ajoutés par l'opérateur et laisse l'accès à la base de données intact; le schéma de la base de données se met à jour automatiquement au démarrage de l'API (migration DacPac).
- Mettez à jour le paquet SPFx : téléversez le dernier
accesspoint.sppkgdans votre catalogue d'applications (étape 2 ci-dessus). Mettez à jour le paquet de l'application Teams dans le Centre d'administration Teams si un nouveauaccesspoint-teams.zipa été publié. - Revisitez la page Terminer la configuration après la mise à niveau — elle accorde de façon idempotente toutes les autorisations Graph introduites depuis votre déploiement initial.
Données d'exemple pour les locataires d'évaluation. Pour les environnements de démonstration et d'évaluation, un composant web distinct, AccessPoint DevTools (
accesspoint-devtools.sppkg), peut réinitialiser un locataire et préremplir des données d'exemple adaptées à la juridiction — utilisateurs fictifs, demandes, affectations et documents générés — au moyen d'un bouton Reconstruire la démo en un clic. Il réutilise la connexion API de l'application principale et déclare ses propres autorisations API (à approuver une seule fois sous Centre d'administration SharePoint > Avancé > Accès API). Ne pas utiliser en production : les points de terminaison de réinitialisation destructifs ne s'activent que lorsque le paramètre d'App ServiceDevTools:Enabled=trueest défini — déployez ce paquet uniquement sur des locataires de développement ou de démonstration.
Confidentialité des données de notification Teams (facultatif)
Tous les dossiers de demandes, les RPI du demandeur, les documents et l'historique d'audit ne vivent que dans votre propre locataire. Les notifications respectent cela aussi. AccessPoint achemine chaque notification sur jusqu'à trois canaux, et deux d'entre eux ne quittent jamais votre locataire : le flux intégré à l'application (servi depuis votre propre API) et le courriel/Outlook (envoyé depuis votre propre boîte aux lettres partagée via Mail.Send). Le flux d'activité Teams est le seul canal qui, dans son mode par défaut, envoie par POST une petite charge utile à l'API de la Plateforme Realizer — laquelle n'existe que parce que Microsoft Graph exige qu'une notification d'activité soit envoyée par l'application propriétaire du manifeste Teams. L'éditeur n'en conserve rien et ne consigne que les GUID du destinataire et du locataire, et les mêmes notifications arrivent tout de même par courriel et dans l'application. Deux contrôles resserrent ou suppriment même cela :
Minimiser (une bascule). Dans Paramètres > Configuration > Notifications Teams, activez Minimiser le contenu des notifications Teams (confidentialité). La charge utile relayée remplace alors le titre/l'aperçu de la notification et le nom de l'utilisateur agissant par des valeurs neutres génériques, de sorte qu'aucun nom d'assignation ou de tâche, aucun texte de notification et aucun nom personnel ne quitte le locataire — seuls le type d'activité, le numéro de demande et les identifiants d'enregistrement transitent encore, afin que la notification puisse s'acheminer et créer un lien profond. Le texte intégral demeure visible dans le flux intégré à l'application. Aucune modification du manifeste n'est requise. (En coulisses : le paramètre de locataire Notifications:TeamsMinimalPayload.)
Éliminer (auto-hébergement du relais). Un locataire qui ne doit envoyer aucune donnée de notification à l'éditeur peut faire en sorte que sa propre API appelle Graph directement avec sa propre identité managée, de sorte que rien n'atteigne api.realizer.io :
- Accordez
TeamsActivity.Send(application) à l'identité managée de l'API et donnez-y le consentement de l'administrateur — Graph ne permet qu'à l'application propriétaire du manifeste Teams d'envoyer des notifications d'activité, de sorte que l'identité expéditrice doit correspondre auwebApplicationInfo.iddu manifeste. - Pointez le manifeste Teams vers votre propre application. Dans
manifest.json, définissezwebApplicationInfo.idà l'ID client de votre inscription d'application API / identité managée (en remplaçant l'ID d'application de l'éditeur), en laissantwebApplicationInfo.resourcecomme le domaine du site SharePoint. Téléversez le fichier zip modifié directement dans le Centre d'administration Teams — n'utilisez pas « Synchroniser vers Teams » de SharePoint (cela réécritwebApplicationInfo). - Basculez l'API vers le relais direct — ajoutez le paramètre d'App Service
Notifications__TeamsRelayMode=Direct(par défaut/non défini =Publisher) et redémarrez. L'API appelle désormais elle-mêmesendActivityNotification; l'octroi de l'application d'entreprise de l'éditeur n'est plus nécessaire pour les notifications. - Revalidez — envoyez une notification test (confirmez qu'elle crée un lien profond) et confirmez que l'onglet personnel Teams permet toujours la connexion, puisque vous avez modifié
webApplicationInfo.id.
Le relais direct conserve 100 % du contenu des notifications à l'intérieur du locataire, mais implique de maintenir un manifeste Teams personnalisé et de redonner son consentement chaque fois que l'ID d'application change. La plupart des locataires qui n'ont besoin que de supprimer le texte libre et les noms personnels devraient plutôt utiliser la bascule Minimiser — aucune modification du manifeste, et la notification crée toujours un lien profond.
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 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 paquets de juridiction 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.