Steg-för-steg-guide för att driftsätta AccessPoint i din Microsoft 365- och Azure-miljö

Last updated: August 09, 2026 by Steve

Driftsättningsguide

AccessPoint använder en delad driftsättningsmodell: en lättviktig SPFx-webbdel i SharePoint, en Teams-app som är värd för samma webbdel som en personlig flik, och en Azure-backend som kör API:et och lagrar all data. Varje komponent placeras i din egen Microsoft 365-klientorganisation och Azure-prenumeration — inget hostas av utgivaren, och ingen kunddata lämnar din miljö.

Översikt

Komponent Hämtas från Placeras i
SPFx-webbdel (accesspoint.sppkg) Microsoft AppSource eller direkt uppladdning till din appkatalog Din SharePoint Online-klientorganisation
Teams-app (accesspoint-teams.zip) Microsoft AppSource eller uppladdning till Teams administrationscenter Din Teams-appkatalog
Azure-backend (App Service, SQL, Blob Storage, Application Insights) Bicep/ARM-mall med ett klick från Azure-portalen (rekommenderas) eller skriptad Bicep + PowerShell Din Azure-prenumeration

För suveräna moln/myndighetsmoln, versionslåsning eller skriptade driftsättningar publiceras alla artefakter även på https://get.realizer.io/public/accesspoint/latest/.

Installationsordningen spelar roll. Installera SharePoint-lösningen innan någon användare öppnar den personliga fliken i Teams. Teams-appen läser in SPFx-webbdelen från SharePoint i en iframe — utan den ser användarna en SharePoint 404-sida inuti Teams.

Förutsättningar

  • En aktiv AccessPoint-prenumeration (skaffa AccessPoint) — API:et aktiverar sin licens automatiskt med hjälp av sin Entra-identitet, så ingen licensnyckel behövs om inte Realizer Support tillhandahåller en för din klientorganisation
  • En Azure-prenumeration med rollen Deltagare (eller högre) på målresursgruppen
  • En SharePoint-appkatalog etablerad i din klientorganisation, samt rollen SharePoint-administratör
  • Global administratör eller programadministratör i Entra ID för beviljande av Graph-behörigheter och administratörsgodkännande
  • Teams-administratör (eller global administratör) för att publicera Teams-appen
  • För skriptade eller manuella driftsättningar: Azure CLI (inloggad med az login som användare, inte som tjänsteprincipal) och modulen PnP.PowerShell

Det finns inget beroende av Microsoft 365-licensnivå, Power Platform eller Dataverse — vilken användare som helst med åtkomst till SharePoint eller Teams kan använda AccessPoint.

Steg 1: Driftsätt Azure-resurser

Det här steget etablerar backend: en Linux App Service (API:et), Azure SQL Database, Blob Storage och Application Insights med Log Analytics. Resurserna namnges {typ}-accesspoint-{klientnamn} (till exempel app-accesspoint-contoso) och är hårdgjorda som standard (TLS 1.3, enbart Entra-autentisering för SQL, FTPS och grundläggande autentisering avaktiverat, Microsoft Defender for SQL påslaget som standard). SQL-servern skapas Entra-först: den driftsättande användaren blir den första Entra-administratören och det finns aldrig några SQL-autentiseringsuppgifter — det finns inget att rotera eller avaktivera.

Veckovisa e-postmeddelanden om "Vulnerability Assessment scan completed" som visar underkända kontroller, men ingenting i portalen? Förväntat vid en färsk driftsättning, inte en sårbarhet. Microsoft Defender for SQL kör den klassiska (lagringsbaserade) Vulnerability Assessment, men Azure-portalens Defender-blad använder numera som standard den nyare vyn express configuration, så länken "Visa resultat" i e-postmeddelandet kan landa på en vy utan några genomförda skanningar. De underkända kontrollerna är baslinje-kontroller, som underkänns tills det aktuella läget godkänns som baslinje — mallen förgodkänner den deterministiska kontrollen VA2065 (brandväggsregler), men en klientorganisationsspecifik kontroll med låg allvarlighetsgrad för användarspårning på applikationsdatabasen kan inte förklaras i förväg. Lös det en gång för alla: öppna SQL-servern (inte databasen) → Microsoft Defender for Cloud → Vulnerability assessment → öppna den underkända kontrollen → Godkänn som baslinje → kör Scan igen; efterföljande veckovisa e-postmeddelanden rapporterar att alla kontroller godkänns.

Alternativ A: Azure-portalen (rekommenderas). Driftsätt AccessPoints Bicep/ARM-mall med ett klick från Azure-portalen (knappen Deploy to Azure). Driftsättningsformuläret samlar in din prenumeration och resursgrupp, klientnamn (t.ex. contoso från contoso.sharepoint.com) samt en obligatorisk Driftsättningstyp utan standardvärde: välj Ny installation för en förstagångsdriftsättning, eller Uppgradera befintlig installation vid omdriftsättning över en körande AccessPoint-installation — uppgraderingsläget bevarar operatörstillagda programinställningar och lämnar databasåtkomsten orörd. Välj eventuellt en App Service-SKU (B1 för utvärdering, S1 för standardproduktion, P1v3 som standard), en e-postadress för aviseringar samt de valfria AI-kapabiliteterna nedan. Lämna API-nyckeln för licensen tom — AccessPoint aktiverar sin licens automatiskt med hjälp av appens Entra-identitet; ange bara ett värde om Realizer Support tillhandahåller ett för din klientorganisation. API-paketet driftsätts automatiskt i App Service — efter driftsättningen finns inget körtidsberoende av externa tjänster.

Slutför konfigurationen (Graph-behörigheter). Mallen i sig beviljar aldrig Graph-behörigheter. Efter driftsättningen öppnar du länken finishSetupUrl från driftsättningens utdata och loggar in som global administratör — utgivarens sida för att slutföra konfigurationen beviljar i en enda idempotent omgång alla Graph-behörigheter som den hanterade identiteten behöver. Besök samma länk igen efter en uppgradering för att få nyligen tillkomna behörigheter. Genomför sedan en fullständig stopp/start-cykel för App Service (inte omstart) så att behörigheterna träder i kraft.

Driftsättning av AccessPoints Bicep/ARM-mall i Azure-portalen

Alternativ B: Bicep + PowerShell. För anpassade pipelines eller strikt ändringskontroll, kör driftsättningsskriptet mot den publicerade ARM-mallen:

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

# End-to-end: infrastruktur, konfiguration och båda apparna
.\Deploy-AccessPoint.ps1 `
    -SharePointSiteUrl "https://contoso.sharepoint.com/sites/accesspoint" `
    -TemplateUri "https://get.realizer.io/public/accesspoint/latest/main.json" `
    -DeploySharePointApp -DeployTeamsApp

Skriptet identifierar automatiskt driftsättningstypen (ny installation kontra uppgradering) och kör upp till sju steg — infrastruktur, enbart Entra-autentisering för SQL (en säkerhetsspärr: aktuella mallar skapar servern Entra-först), beviljande av Graph-behörigheter (skriptmotsvarigheten till sidan för att slutföra konfigurationen), en stopp/start-cykel för App Service, den valfria SharePoint-lagringsentiteten (API-URL), godkännanden av SPFx API-behörigheter, samt valfri appinstallation. Varje steg kan hoppas över individuellt (-SkipInfrastructure, -SkipGraphPermissions, -SkipSharePoint). Lås en version med -ArtifactBaseUrl "https://get.realizer.io/public/accesspoint/2.0.67" för reproducerbara driftsättningar med integritetskontroll (skriptet kontrollerar den publicerade SHA-256-summan och avbryter vid avvikelse).

Kör infrastrukturdelarna själv istället:

$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

Beviljande av Graph-behörigheter. App Services hanterade identitet behöver dessa programbehörigheter i Microsoft Graph: Mail.Send, User.ReadBasic.All, TeamsAppInstallation.ReadForUser.All, Application.Read.All, AppCatalog.Read.All, samt (aktiverad som standard, kan väljas bort) AiEnterpriseInteraction.Read.All för Copilot capture. Den enklaste vägen är sidan för att slutföra konfigurationen — driftsättningens utdata finishSetupUrl — som beviljar dem alla i en enda idempotent omgång med hjälp av en global administratörs delegerade inloggning. Bevilja dem i stället via CLI:

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

# Fullständig stopp/start (INTE omstart) rensar cacheminnet för hanterad identitets-token
az webapp stop  --name $appName --resource-group $ResourceGroup
Start-Sleep -Seconds 10
az webapp start --name $appName --resource-group $ResourceGroup

Verifiera: öppna https://<api-url>/api/health i webbläsaren och bekräfta ett friskt svar.

Valfria AI-kapabiliteter

Mallen exponerar fyra valfria kapabiliteter, varav ingen krävs för att köra AccessPoint. AI Assist, AI Search och Document Intelligence är avstängda om du inte aktiverar dem vid driftsättningen; Copilot capture-behörigheten beviljas som standard men kan väljas bort (formuläret Deploy to Azure, -p name=valueaz deployment, eller växlarna i Deploy-AccessPoint.ps1 som anges nedan styr alla fyra). Alla AI-resurser driftsätts i din egen Azure-prenumeration med autentisering enbart via hanterad identitet — ingen kunddata lämnar din klientorganisation, och Microsoft tränar inte modeller på den.

  • Deploy AI Assist (Azure OpenAI) — lägger till en Azure OpenAI-resurs i din prenumeration med autentisering via hanterad identitet (inga API-nycklar). Debiteringen sker per användning, så en vilande klientorganisation betalar ungefär 0 USD och en aktiv avdelning spenderar vanligtvis ensiffriga dollarbelopp per månad. Att driftsätta den aktiverar AI Assist-funktionerna, som var och en kan slås på och av individuellt under Inställningar > Funktioner. Varje AI-utdata är ett förslag eller ett redigerbart utkast — en människa beslutar alltid.
  • Deploy AI Search (deployAiSearch=true) — lägger till Azure AI Search så att sökrutan i Dokument matchar ord inuti dokument (extraherad PDF-text) utöver namn, typer och taggar; med AI Assist också driftsatt stöds semantisk sökning. Nya dokument indexeras automatiskt, och en administratörskörning (Inställningar > Grundkonfiguration > Sökning i dokumentinnehåll) indexerar dem som fanns dessförinnan.
  • Deploy Document Intelligence (deployDocumentIntelligence=true) — lägger till Azure AI Document Intelligence för OCR: skannade, bildbaserade dokument får sin text inläst så att de deltar i innehållssökning, dubblettidentifiering, AI-sammanfattningar och maskeringsförslag precis som alla andra dokument. Debiteringen sker per sida (ungefär 1,50 USD per 1 000 sidor). Utan den matchar skannade dokument fortfarande på namn, typ och taggar.
  • Copilot capture-behörighet (AiEnterpriseInteraction.Read.All) — denna klientorganisationsomfattande Graph-behörighet beviljas som standard, så att förvaltare direkt kan fånga Copilot-interaktionshistorik via Dokument > Lägg till från Microsoft 365. Den är enbart en programbehörighet (Microsoft Graph erbjuder ingen delegerad variant), men AccessPoint läser alltid bara den inloggade användarens egen Copilot-historik. Klientorganisationer som tillämpar minsta möjliga behörighet kan välja bort den med Deploy-AccessPoint.ps1 -DisableCopilotCapture (eller grantCopilotCapturePermission=false på ARM/Bicep-mallen) och kan när som helst återkalla approllen i Entra ID; de fem standardbehörigheterna för Graph ovan påverkas inte.

Steg 2: Installera AccessPoint-apparna

Installera SharePoint-lösningen först, sedan Teams-appen.

SharePoint-lösning. Från AppSource-listningen, klicka på Skaffa nu och godkänn den till din SharePoint-appkatalog, driftsatt för hela klientorganisationen. Alternativt, ladda upp manuellt (SharePoint administrationscenter > Fler funktioner > Appar > Ladda upp, markera "Gör den här lösningen tillgänglig för alla webbplatser") eller låt skriptet göra det.

AccessPoint-lösningen i SharePoints appkatalog

Teams-app. Från AppSource-listningen, klicka på Skaffa nu och godkänn den i Teams administrationscenter, eller installera båda apparna via skriptet (den inloggade användaren behöver SharePoint-administratör samt Teams-administratör eller global administratör):

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

Använd INTE SharePoints "Synkronisera till Teams". Det åsidosätter tyst manifestets webApplicationInfo.id, vilket bryter aviseringar i Teams aktivitetsflöde. Ladda upp Teams-appen direkt till Teams administrationscenter.

Verifiera: lösningen visas i appkatalogen utan fel, och AccessPoint visas som Tillåten under Teams administrationscenter > Hantera appar.

Steg 3: Godkänn API-behörigheter

SPFx-paketet begär delegerade behörigheter som en SharePoint-administratör måste godkänna. I SharePoint administrationscenter, gå till Avancerat > API-åtkomst och godkänn varje väntande AccessPoint-begäran: access_as_user på AccessPoint-API:et, samt Graph-omfång för personväljarna och Lägg till från Microsoft 365-källorna — User.Read.All, Sites.Read.All, Files.Read.All, Mail.Read och Mail.Read.Shared (egna och delade/mottagningsbrevlådor), Calendars.Read och Calendars.Read.Shared, Chat.Read, ChannelMessage.Read.All, Team.ReadBasic.All, Channel.ReadBasic.All (Teams-chattar och -kanaler) samt Notes.Read och Notes.Read.All (OneNote). .Shared-omfången utökar aldrig åtkomsten på egen hand — Graph upprätthåller fortfarande varje användares befintliga Exchange-brevlådebehörigheter.

Godkännande av AccessPoints begäranden om API-behörighet

Den väntande begäran markerad, med Godkänn och Avvisa tillgängliga

Eller godkänn 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
}

Slutligen beviljar en global administratör administratörsgodkännande för utgivarens app för flera klientorganisationer genom att öppna https://login.microsoftonline.com/common/adminconsent?client_id=ed19c96c-a7c5-4dca-8b47-0899c406329f i en webbläsare.

Verifiera: sidan för API-åtkomst visar inga väntande AccessPoint-begäranden.

Steg 4: Använd AccessPoint i SharePoint eller Teams

SharePoint: redigera eller skapa en sida, klicka på +, sök efter AccessPoint, lägg till webbdelen och publicera.

Teams: användare hittar AccessPoint under Appar > Byggd för din organisation (sökindexering kan ta 15 minuter upp till flera timmar efter den första installationen). Fäst den valfritt för alla via Teams administrationscenter > Principer för appinställning genom att lägga till AccessPoint under Installerade appar och Fästa appar.

Steg 5: Konfiguration av API-URL (vanligtvis automatisk)

Webbdelen upptäcker API-URL:en automatiskt. AccessPoint-API:et självregistrerar sin adress hos Realizer-plattformen när det validerar sin licens — inom några minuter efter att App Service har startat — och webbdelen hämtar den därifrån. I de flesta driftsättningar finns det inget att göra här.

Verifiera: läs in webbdelen på nytt — instrumentpanelen laddas istället för konfigurationsprompten. Om API:et just har driftsatts lyckas upptäckten vid nästa sidladdning efter den första lyckade licensvalideringen.

Ställa in API-URL:en manuellt (valfritt)

Du behöver bara detta för att åsidosätta den automatiska upptäckten — till exempel för att låsa webbdelen till en anpassad domän.

Alternativ A — konfigurationspanelen. Öppna webbdelen, gå till Inställningar > Konfiguration, ange API-URL:en (App Service-URL:en från steg 1, t.ex. https://app-accesspoint-contoso.azurewebsites.net) och klicka på Spara. Panelen validerar HTTPS innan den sparar, och en manuellt angiven URL har företräde framför den automatiska upptäckten.

Konfiguration av API-URL i konfigurationspanelen

Alternativ B — lagringsentitet (PowerShell). Lås URL:en i en AccessPoint_ApiUrl-lagringsentitet, som har företräde framför den automatiska upptäckten. Sedan januari 2026 blockerar SharePoint skrivningar till egenskapspåsen på no-script-appkatalogen (meddelandecenter MC1186368), så en SharePoint-administratör måste tillåta dem en gång, för hela klientorganisationen, innan lagringsentiteten kan skrivas:

# 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

Steg 6: Importera ett jurisdiktionspaket

Gå till Inställningar > Jurisdiktionspaket, välj paketet för din jurisdiktion (Kanada ATIA, USA FOIA, EU GDPR med flera) och klicka på Importera. Paketet skapar begärandetyper, förlängningsskäl, valfält, aviseringsmallar och översättningar. Granska och anpassa de importerade objekten efteråt.

Steg 7: Tilldela användarroller

Den första användaren som öppnar AccessPoint tilldelas automatiskt rollen Administratör — den enda inbyggda rollen, som alltid ger alla behörigheter. Alla andra roller definieras av klientorganisationen: att importera ett jurisdiktionspaket sår färdiga roller (till exempel Request Coordinator, den de facto-roll som fungerar som handläggare för tillgång och integritet), och du kan döpa om eller omforma dem under Inställningar > Roller och behörigheter. Gå till Inställningar > Hantera användare, klicka på Lägg till användare, sök i din katalog och tilldela minst en administratör och en samordnare; åtkomst som Förvaltare, Medarbetare, Granskare och Läsare följer automatiskt av det arbete du tilldelar personer.

AccessPoint är nu klart för användning.

Uppdatera AccessPoint

AccessPoint talar om när en nyare version är tillgänglig — det finns inget att prenumerera på eller söka av manuellt:

  • Under rutinmässig licensvalidering rapporterar Realizer Platform den senast publicerade AccessPoint-versionen (den version som senast befordrats till kundens utgivningskanal). Ingen användnings- eller ärendedata ingår i denna kontroll.
  • När den publicerade versionen är nyare än den ditt API kör ser administratörer en avisering om Uppdatering tillgänglig på instrumentpanelen och i Grundkonfiguration, som visar aktuellt och senaste versionsnummer.
  • När du är à jour (eller kör en förhandsversion nyare än den publicerade utgåvan) visar Grundkonfiguration "Ditt AccessPoint-API är uppdaterat."

Så här tillämpar du en uppdatering:

  1. Under Inställningar > Grundkonfiguration, klicka på Driftsätt uppdatering till Azure. Detta öppnar Azure-portalen med den senaste ARM-mallen — samma mall som används vid den första driftsättningen.
  2. Välj driftsättningstypen Uppgradera befintlig installation. Detta bevarar operatörstillagda programinställningar och lämnar databasåtkomsten orörd; databasschemat uppgraderas automatiskt vid API-uppstart (DacPac-migrering).
  3. Uppdatera SPFx-paketet: ladda upp det senaste accesspoint.sppkg till din appkatalog (steg 2 ovan). Uppdatera Teams-apppaketet i Teams administrationscenter om en ny accesspoint-teams.zip har släppts.
  4. Besök sidan Slutför konfigurationen igen efter uppgraderingen — den beviljar idempotent alla Graph-behörigheter som tillkommit sedan din ursprungliga driftsättning.

Exempeldata för utvärderingsklientorganisationer. För demo- och utvärderingsmiljöer kan en separat webbdel, AccessPoint DevTools (accesspoint-devtools.sppkg), återställa en klientorganisation och så jurisdiktionsanpassad exempeldata — testanvändare, förfrågningar, uppdrag och genererade dokument — med ett enda klick på Återskapa demo. Den återanvänder huvudappens API-anslutning och deklarerar sina egna API-behörigheter (godkänns en gång under SharePoint-administratör > Avancerat > API-åtkomst). Inte för produktion: de destruktiva återställningsslutpunkterna aktiveras endast när App Service-inställningen DevTools:Enabled=true är satt — driftsätt paketet endast till utvecklings-/demoklientorganisationer.

Datasekretess för Teams-aviseringar (valfritt)

Alla förfrågningsposter, den sökandes personuppgifter, dokument och revisionshistorik finns bara i din egen klientorganisation. Aviseringar respekterar det också. AccessPoint levererar varje avisering på upp till tre kanaler, och två av dem lämnar aldrig din klientorganisation: appflödet (som levereras från ditt eget API) och e-post/Outlook (som skickas från din egen delade brevlåda via Mail.Send). Teams aktivitetsflöde är den enda kanalen som i sitt standardläge POSTar en liten payload till Realizer Platform API — vilket enbart existerar eftersom Microsoft Graph kräver att en aktivitetsavisering skickas av appen som äger Teams-manifestet. Utgivaren lagrar ingenting av det och loggar endast mottagar- och klientorganisations-GUID, och samma aviseringar anländer ändå via e-post och i appflödet. Två kontroller stramar åt eller tar bort även detta:

Minimera (en växel). Under Inställningar > Konfiguration > Teams-aviseringar, aktivera Minimera innehåll i Teams-aviseringar (integritet). Den vidarebefordrade payloaden ersätter då aviseringens titel/förhandsgranskningstext och den agerande användarens namn med neutrala platshållare, så att inga uppdrags-/uppgiftsnamn, aviseringstext eller personnamn lämnar klientorganisationen — endast aktivitetstyp, förfrågningsnummer och postidentifierare transiterar fortfarande så att aviseringen kan dirigeras och djuplänkas. Den fullständiga texten visas fortfarande i appflödet. Ingen manifeständring krävs. (Under huven: klientorganisationsinställningen Notifications:TeamsMinimalPayload.)

Eliminera (självhosta reläet). En klientorganisation som inte får skicka någon aviseringsdata till utgivaren kan låta sitt eget API anropa Graph direkt med sin hanterade identitet, så att ingenting når api.realizer.io:

  1. Bevilja TeamsActivity.Send (programbehörighet) till API:ets hanterade identitet och administratörsgodkänn det — Graph tillåter bara att appen som äger Teams-manifestet skickar aktivitetsaviseringar, så den sändande identiteten måste matcha manifestets webApplicationInfo.id.
  2. Peka Teams-manifestet på din egen app. I manifest.json, sätt webApplicationInfo.id till din API-appregistrering/hanterade identitets klient-ID (i stället för utgivarens app-ID), och lämna webApplicationInfo.resource som SharePoint-webbplatsens domän. Ladda upp den redigerade zip-filen direkt i Teams administrationscenter — använd inte SharePoints "Synkronisera till Teams" (det skriver om webApplicationInfo).
  3. Växla API:et till direktrelä — lägg till App Service-inställningen Notifications__TeamsRelayMode=Direct (standard/ej angivet = Publisher) och starta om. API:et anropar nu sendActivityNotification själv; utgivarens företagsappbeviljande behövs inte längre för aviseringar.
  4. Validera på nytt — skicka en testavisering (bekräfta att den djuplänkar) och bekräfta att den personliga Teams-fliken fortfarande loggar in, eftersom du ändrade webApplicationInfo.id.

Direktrelä håller 100 % av aviseringsinnehållet inom klientorganisationen men innebär att du måste underhålla ett anpassat Teams-manifest och godkänna på nytt när app-ID:t ändras. De flesta klientorganisationer som bara behöver undertrycka fritext och personnamn bör i stället använda växeln Minimera — ingen manifeständring, och aviseringen djuplänkar fortfarande.

Driftsättning för flera klientorganisationer

Använd det här mönstret när Azure-backend finns i en annan Entra ID-klientorganisation än din Microsoft 365-klientorganisation — ett delat tjänsteteam som betjänar flera affärsenheter, en MSP som hostar åt kunder, eller separata Azure/M365-klientorganisationer av styrningsskäl. En enda driftsättning kan betjäna flera M365-klientorganisationer: API:et separerar data efter klientorganisations-ID i varje användares token, med databasfrågefilter avgränsade per klientorganisation och blob-sökvägar med klientorganisationsprefix. Varje M365-klientorganisation behöver ändå sin egen licens, sin egen SPFx-driftsättning och egna godkännanden av API-behörigheter, samt sina egna Graph-autentiseringsuppgifter och aviseringsbrevlåda.

Graph-appregistrering. En hanterad identitet fungerar bara i sin hemklientorganisation, så skapa en appregistrering för en enda klientorganisation i M365-klientorganisationen (t.ex. AccessPoint Graph Connector), bevilja den samma Graph-programbehörigheter som anges i steg 1, med administratörsgodkännande, skapa sedan en klienthemlighet och koppla den till App Service via Key Vault:

# I M365-klientorganisationen: skapa klienthemligheten
$secret = az ad app credential reset --id $appId --display-name "AccessPoint" --years 2 --query password -o tsv

# I Azure-prenumerationen: lagra hemligheten och referera till den från 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

Lagra aldrig hemligheten direkt i App Service-inställningarna; App Services hanterade identitet behöver rollen Key Vault Secrets User på valvet. När alla tre Graph__*-inställningarna finns använder API:et appregistreringen; när de saknas faller det tillbaka på den hanterade identiteten för driftsättningar inom samma klientorganisation.

Delad brevlåda och principer för programåtkomst. Skapa en olicensierad delad brevlåda i M365-klientorganisationen för e-postaviseringar, och avgränsa Mail.Send så att appen bara kan skicka från den brevlådan:

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"

# Verifiera (spridning kan ta upp till 30 minuter)
Test-ApplicationAccessPolicy -AppId $appId -Identity "accesspoint-noreply@contoso.com"   # expect: Granted
Test-ApplicationAccessPolicy -AppId $appId -Identity "someother@contoso.com"             # expect: Denied

Varje M365-klientorganisation upprepar sedan steg 2–5 (appar, godkännanden, API-URL — samma API-URL betjänar alla klientorganisationer). Aviseringar i Teams aktivitetsflöde kräver dessutom administratörsgodkännande för Realizers företagsapp och att Teams-appen installeras för användarna; se Grundläggande konfiguration för mer information.

Återställning och drift

Standardmekanismer i Azure täcker återställning: driftsätt om ett tidigare API-paket från historiken i App Services Deployment Center, återställ Azure SQL med tidpunktsåterställning (upp till 35 dagar), och ladda upp en tidigare versionerad .sppkg till appkatalogen igen. Import av jurisdiktionspaket är additiv och återställs via databasåterställning. För den fullständiga driftshandboken — detaljerade återställningsprocedurer, övervakning och underhållsuppgifter — kontakta vårt supportteam.