Przewodnik krok po kroku dotyczący wdrażania AccessPoint w środowisku Microsoft 365 i Azure
Last updated: August 09, 2026 by Steve
Przewodnik wdrożeniowy
AccessPoint wykorzystuje podzielony model wdrożenia: lekki web part SPFx w SharePoint, aplikację Teams, która hostuje ten sam web part jako kartę osobistą, oraz backend w Azure, który obsługuje API i przechowuje wszystkie dane. Każdy komponent trafia do Twojej własnej dzierżawy Microsoft 365 i subskrypcji Azure — nic nie jest hostowane przez wydawcę, a żadne dane klienta nie opuszczają Twojego środowiska.
Przegląd
| Komponent | Skąd pobrać | Trafia do |
|---|---|---|
Web part SPFx (accesspoint.sppkg) |
Microsoft AppSource lub bezpośrednie przesłanie do Twojego katalogu aplikacji | Twojej dzierżawy SharePoint Online |
Aplikacja Teams (accesspoint-teams.zip) |
Microsoft AppSource lub przesłanie do Teams Admin Center | Twojego katalogu aplikacji Teams |
| Backend Azure (App Service, SQL, Blob Storage, Application Insights) | Wdrożenie jednym kliknięciem szablonu Bicep/ARM z poziomu portalu Azure (zalecane) lub skryptowo za pomocą Bicep + PowerShell | Twojej subskrypcji Azure |
Dla chmur suwerennych/rządowych, przypinania konkretnej wersji lub wdrożeń skryptowych wszystkie artefakty są również publikowane pod adresem https://get.realizer.io/public/accesspoint/latest/.
Kolejność instalacji ma znaczenie. Zainstaluj rozwiązanie SharePoint zanim jakikolwiek użytkownik otworzy osobistą kartę Teams. Aplikacja Teams ładuje web part SPFx z SharePoint w ramach elementu iframe — bez niego użytkownicy zobaczą błąd SharePoint 404 wewnątrz Teams.
Wymagania wstępne
- Aktywna subskrypcja AccessPoint (pobierz AccessPoint) — API aktywuje swoją licencję automatycznie, wykorzystując własną tożsamość Entra, więc klucz licencji nie jest potrzebny, chyba że zespół wsparcia Realizer dostarczy go dla Twojej dzierżawy
- Subskrypcja Azure z uprawnieniami Contributor (lub wyższymi) w docelowej grupie zasobów
- SharePoint App Catalog przygotowany w Twojej dzierżawie oraz uprawnienia SharePoint Administrator
- Rola Global Administrator lub Application Administrator w Entra ID — do przyznawania uprawnień Graph i wyrażania zgody administratora (admin consent)
- Rola Teams Administrator (lub Global Admin) — do publikacji aplikacji Teams
- Do wdrożeń skryptowych lub ręcznych: Azure CLI (zalogowane poleceniem
az loginjako użytkownik, a nie jednostka usługi) oraz moduł PnP.PowerShell
Nie istnieje żadna zależność od poziomu licencji Microsoft 365, Power Platform ani Dataverse — z AccessPoint może korzystać każdy użytkownik mający dostęp do SharePoint lub Teams.
Krok 1: Wdrożenie zasobów Azure
Ten krok tworzy backend: App Service na Linuksie (API), bazę danych Azure SQL Database, Blob Storage oraz Application Insights wraz z Log Analytics. Zasoby są nazywane według wzorca {type}-accesspoint-{tenantName} (na przykład app-accesspoint-contoso) i są domyślnie zabezpieczone (TLS 1.3, uwierzytelnianie SQL wyłącznie przez Entra, wyłączone FTPS i podstawowe uwierzytelnianie, domyślnie włączony Microsoft Defender for SQL). Serwer SQL jest tworzony w trybie Entra-first: użytkownik przeprowadzający wdrożenie staje się początkowym administratorem Entra, a poświadczenie SQL nigdy nie powstaje — nie ma niczego do rotacji ani wyłączenia.
Cotygodniowe e-maile „Vulnerability Assessment scan completed" pokazujące nieudane kontrole, ale nic w portalu? Zjawisko oczekiwane na świeżo rozłożonym wdrożeniu, nie luka bezpieczeństwa. Microsoft Defender for SQL uruchamia klasyczną (opartą na magazynie) usługę Vulnerability Assessment, ale kafelek Defender w portalu Azure domyślnie pokazuje teraz nowszy widok konfiguracji uproszczonej (express), więc link „Zobacz wyniki" w e-mailu może prowadzić do widoku bez żadnych skanów. Nieudane kontrole to kontrole bazowe (baseline), które kończą się niepowodzeniem, dopóki bieżący stan nie zostanie zatwierdzony jako punkt odniesienia — szablon wstępnie zatwierdza deterministyczną kontrolę VA2065 (reguły zapory), ale niskiej wagi, specyficzna dla dzierżawcy kontrola śledzenia użytkowników na bazie danych aplikacji nie może zostać zadeklarowana z góry. Rozwiąż to jednorazowo: otwórz serwer SQL (nie bazę danych) → Microsoft Defender for Cloud → Vulnerability assessment → otwórz nieudaną kontrolę → Zatwierdź jako punkt odniesienia (Approve as baseline) → uruchom Scan ponownie; kolejne cotygodniowe e-maile będą zgłaszać wszystkie kontrole jako zaliczone.
Opcja A: portal Azure (zalecana). Wdróż szablon Bicep/ARM AccessPoint jednym kliknięciem z poziomu portalu Azure (przycisk Deploy to Azure). Formularz wdrożenia zbiera Twoją subskrypcję i grupę zasobów, nazwę dzierżawcy (np. contoso z contoso.sharepoint.com) oraz obowiązkowy Typ wdrożenia bez wartości domyślnej: wybierz Nowa instalacja dla pierwszego wdrożenia lub Aktualizacja istniejącej instalacji przy ponownym wdrażaniu na działającym już AccessPoint — tryb aktualizacji zachowuje ustawienia aplikacji dodane przez operatora i pozostawia dostęp do bazy danych bez zmian. Opcjonalnie wybierz SKU App Service (B1 do celów ewaluacyjnych, S1 do standardowej produkcji, domyślnie P1v3), adres e-mail do alertów oraz opcjonalne funkcje AI opisane poniżej. Pozostaw klucz API licencji pusty — AccessPoint aktywuje swoją licencję automatycznie, wykorzystując tożsamość Entra aplikacji; wartość wpisz tylko wtedy, gdy zespół wsparcia Realizer dostarczy ją dla Twojej dzierżawy. Pakiet API wdraża się automatycznie do App Service — po wdrożeniu nie występuje żadna zależność od usług zewnętrznych w czasie działania.
Finish Setup (uprawnienia Graph). Sam szablon nigdy nie przyznaje uprawnień Graph. Po wdrożeniu otwórz link finishSetupUrl z sekcji Outputs wdrożenia i zaloguj się jako Global Administrator — strona Finish Setup wydawcy przyznaje w jednym idempotentnym przebiegu wszystkie uprawnienia Graph potrzebne managed identity. Po aktualizacji odwiedź ten sam link ponownie, aby uwzględnić nowo wprowadzone uprawnienia. Następnie wykonaj pełny cykl Stop/Start App Service (nie Restart), aby uprawnienia zaczęły obowiązywać.

Opcja B: Bicep + PowerShell. W przypadku niestandardowych potoków wdrożeniowych lub rygorystycznej kontroli zmian uruchom skrypt wdrożeniowy względem opublikowanego szablonu ARM:
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
Skrypt automatycznie wykrywa typ wdrożenia (nowa instalacja czy aktualizacja) i wykonuje do siedmiu kroków — infrastrukturę, uwierzytelnianie SQL wyłącznie przez Entra (zabezpieczenie awaryjne: obecne szablony tworzą serwer w trybie Entra-first), przyznanie uprawnień Graph (skryptowy odpowiednik strony Finish Setup), cykl zatrzymania/uruchomienia App Service, opcjonalny storage entity SharePoint (adres URL API), zatwierdzenie uprawnień API SPFx oraz opcjonalną instalację aplikacji. Każdy z tych kroków można pominąć niezależnie (-SkipInfrastructure, -SkipGraphPermissions, -SkipSharePoint). Przypnij konkretną wersję za pomocą -ArtifactBaseUrl "https://get.realizer.io/public/accesspoint/2.0.67", aby uzyskać powtarzalne wdrożenia z weryfikacją integralności (skrypt sprawdza opublikowany skrót SHA-256 i przerywa działanie w przypadku niezgodności).
Aby samodzielnie wykonać poszczególne elementy infrastruktury:
$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
Przyznawanie uprawnień Graph. Managed identity App Service wymaga następujących uprawnień aplikacji Microsoft Graph: Mail.Send, User.ReadBasic.All, TeamsAppInstallation.ReadForUser.All, Application.Read.All, AppCatalog.Read.All oraz (domyślnie włączone, z możliwością rezygnacji) AiEnterpriseInteraction.Read.All dla przechwytywania Copilot. Najprostszą ścieżką jest strona Finish Setup — wynik wdrożenia finishSetupUrl — która przyznaje je wszystkie w jednym idempotentnym przebiegu, wykorzystując delegowane logowanie Global Administrator. Aby przyznać je zamiast tego przez 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
}
# 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
Weryfikacja: przejdź do https://<api-url>/api/health i potwierdź prawidłową odpowiedź.
Opcjonalne funkcje AI
Szablon udostępnia cztery opcjonalne funkcje, z których żadna nie jest wymagana do działania AccessPoint. AI Assist, AI Search i Document Intelligence pozostają wyłączone, dopóki nie włączysz ich w czasie wdrożenia; uprawnienie Copilot capture jest natomiast przyznawane domyślnie, ale można z niego zrezygnować (formularz Deploy to Azure, -p name=value w poleceniu az deployment lub przełączniki Deploy-AccessPoint.ps1 wskazane poniżej sterują wszystkimi czterema). Wszystkie zasoby AI są wdrażane w Twojej własnej subskrypcji Azure z uwierzytelnianiem wyłącznie za pomocą managed identity — żadne dane klienta nie opuszczają Twojej dzierżawy, a Microsoft nie trenuje na nich modeli.
- Deploy AI Assist (Azure OpenAI) — dodaje do Twojej subskrypcji zasób Azure OpenAI z uwierzytelnianiem za pomocą managed identity (bez kluczy API). Rozliczanie odbywa się według zużycia (pay-per-use), więc bezczynna dzierżawa płaci około 0 USD, a intensywnie korzystający dział zwykle wydaje kilka dolarów miesięcznie. Wdrożenie tego zasobu włącza funkcje AI Assist, z których każdą można przełączać z osobna w Settings > Features. Każdy wynik AI to sugestia lub edytowalny szkic — decyzję zawsze podejmuje człowiek.
- Deploy AI Search (
deployAiSearch=true) — dodaje Azure AI Search, dzięki czemu pole wyszukiwania Dokumentów dopasowuje słowa wewnątrz dokumentów (wyodrębniony tekst PDF) obok nazw, typów i tagów; przy wdrożonym również AI Assist obsługuje wyszukiwanie semantyczne. Nowe dokumenty są indeksowane automatycznie, a przemiatanie uruchamiane przez Administratora (Settings > Setup > Document content search) indeksuje wszystkie te, które je poprzedzają. - Deploy Document Intelligence (
deployDocumentIntelligence=true) — dodaje Azure AI Document Intelligence do OCR: zeskanowane dokumenty zawierające wyłącznie obraz mają odczytywany tekst, dzięki czemu uczestniczą w wyszukiwaniu treści, wykrywaniu duplikatów, podsumowaniach AI i sugestiach redakcji tak samo jak każdy inny dokument. Rozliczanie odbywa się według liczby stron (około 1,50 USD za 1000 stron). Bez tego zasobu zeskanowane dokumenty nadal są dopasowywane po nazwie, typie i tagach. - Copilot capture permission (
AiEnterpriseInteraction.Read.All) — to obejmujące całą dzierżawę uprawnienie Graph jest przyznawane domyślnie, dzięki czemu użytkownicy roli Custodian mogą od razu przechwytywać historię interakcji Copilot za pomocą Documents > Add from Microsoft 365. Dzierżawy stosujące zasadę najmniejszych uprawnień mogą z niego zrezygnować, dodając-DisableCopilotCapturew skrypcieDeploy-AccessPoint.ps1(lubgrantCopilotCapturePermission=falsew szablonie ARM/Bicep), i mogą w dowolnym momencie cofnąć rolę aplikacji w Entra ID. Jest to uprawnienie wyłącznie aplikacyjne (Microsoft Graph nie oferuje wariantu delegowanego), ale AccessPoint zawsze odczytuje wyłącznie własną historię Copilot zalogowanego użytkownika; pięć standardowych uprawnień Graph wymienionych powyżej pozostaje bez zmian.
Krok 2: Instalacja aplikacji AccessPoint
Najpierw zainstaluj rozwiązanie SharePoint, a następnie aplikację Teams.
Rozwiązanie SharePoint. Na stronie w AppSource kliknij Get it now i zatwierdź je do swojego SharePoint App Catalog, wdrożonego w całej dzierżawie. Możesz też przesłać je ręcznie (SharePoint Admin Center > More features > Apps > Upload, zaznacz „Make this solution available to all sites”) albo pozwolić, by zrobił to skrypt.

Aplikacja Teams. Na stronie w AppSource kliknij Get it now i zatwierdź ją w Teams Admin Center, albo zainstaluj obie aplikacje za pomocą skryptu (zalogowany użytkownik potrzebuje uprawnień SharePoint admin oraz Teams admin lub Global admin):
.\Deploy-AccessPoint.ps1 `
-SharePointSiteUrl "https://contoso.sharepoint.com/sites/accesspoint" `
-SkipInfrastructure -SkipGraphPermissions `
-DeploySharePointApp -DeployTeamsApp
NIE używaj funkcji SharePoint „Sync to Teams”. Cicho nadpisuje ona
webApplicationInfo.idw manifeście, co powoduje przerwanie powiadomień w kanale aktywności Teams. Prześlij aplikację Teams bezpośrednio do Teams Admin Center.
Weryfikacja: rozwiązanie pojawia się w katalogu aplikacji bez błędów, a AccessPoint jest oznaczony jako Allowed w Teams Admin Center > Manage apps.
Krok 3: Zatwierdzenie uprawnień API
Pakiet SPFx żąda uprawnień delegowanych, które musi zatwierdzić administrator SharePoint. W SharePoint Admin Center przejdź do Advanced > API access i zatwierdź każde oczekujące żądanie AccessPoint: access_as_user dla API AccessPoint oraz zakresy Graph dla selektorów osób i źródeł przechwytywania Add-from-Microsoft-365 — User.Read.All, Sites.Read.All, Files.Read.All, Mail.Read i Mail.Read.Shared (własne oraz współdzielone skrzynki/skrzynki przyjęciowe), Calendars.Read i Calendars.Read.Shared, Chat.Read, ChannelMessage.Read.All, Team.ReadBasic.All, Channel.ReadBasic.All (czaty i kanały Teams) oraz Notes.Read i Notes.Read.All (OneNote). Zakresy .Shared same w sobie nigdy nie rozszerzają dostępu — Graph nadal egzekwuje dotychczasowe uprawnienia każdego użytkownika do skrzynki pocztowej Exchange.


Możesz też zatwierdzić je za pomocą 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
}
Na koniec Global Administrator udziela zgody administratora (admin consent) dla wielodzierżawcowej aplikacji wydawcy, otwierając w przeglądarce adres https://login.microsoftonline.com/common/adminconsent?client_id=ed19c96c-a7c5-4dca-8b47-0899c406329f.
Weryfikacja: strona API access nie pokazuje już żadnych oczekujących żądań AccessPoint.
Krok 4: Korzystanie z AccessPoint w SharePoint lub Teams
SharePoint: edytuj lub utwórz stronę, kliknij +, wyszukaj AccessPoint, dodaj web part i opublikuj stronę.
Teams: użytkownicy znajdą AccessPoint w Apps > Built for your org (indeksowanie wyszukiwania może potrwać od 15 minut do kilku godzin po pierwszej instalacji). Opcjonalnie możesz przypiąć aplikację dla wszystkich za pomocą Teams Admin Center > App setup policies, dodając AccessPoint do Installed apps i Pinned apps.
Krok 5: Konfiguracja adresu URL API (zwykle automatyczna)
Web part wykrywa adres URL API automatycznie. API AccessPoint samo rejestruje swój adres na platformie Realizer, gdy weryfikuje swoją licencję — w ciągu kilku minut od uruchomienia App Service — a web part pobiera go stamtąd. W większości wdrożeń nie trzeba tutaj nic robić.
Weryfikacja: odśwież web part — powinien załadować się pulpit zamiast monitu konfiguracyjnego. Jeśli API zostało dopiero co wdrożone, wykrywanie powiedzie się przy następnym załadowaniu strony, po pierwszej udanej weryfikacji licencji.
Ręczne ustawianie adresu URL API (opcjonalne)
Jest to potrzebne wyłącznie do nadpisania automatycznego wykrywania — na przykład aby przypiąć web part do domeny niestandardowej.
Opcja A — panel Setup. Otwórz web part, przejdź do Settings > Setup, wprowadź API URL (adres URL App Service z kroku 1, np. https://app-accesspoint-contoso.azurewebsites.net) i kliknij Save. Panel weryfikuje użycie HTTPS przed zapisaniem, a ręcznie wprowadzony adres URL ma pierwszeństwo przed automatycznym wykrywaniem.

Opcja B — storage entity (PowerShell). Przypnij adres URL w storage entity AccessPoint_ApiUrl, który ma pierwszeństwo przed automatycznym wykrywaniem. Od stycznia 2026 SharePoint blokuje zapisy do property bag w katalogu aplikacji z wyłączoną obsługą skryptów (no-script) (message center MC1186368), więc administrator SharePoint musi jednorazowo zezwolić na nie w całej dzierżawie, zanim będzie można zapisać storage entity:
# 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
Krok 6: Import pakietu jurysdykcyjnego
Przejdź do Settings > Jurisdiction packs, wybierz pakiet odpowiedni dla Twojej jurysdykcji (Canada ATIA, US FOIA, EU GDPR i inne) i kliknij Import. Pakiet tworzy typy wniosków, powody przedłużenia, pola wyboru, szablony powiadomień oraz tłumaczenia. Po imporcie przejrzyj i dostosuj zaimportowane elementy.
Krok 7: Przypisanie ról użytkowników
Pierwszy użytkownik, który otworzy AccessPoint, automatycznie otrzymuje rolę Administrator — jedyną wbudowaną rolę, która zawsze obejmuje wszystkie uprawnienia. Każda inna rola jest definiowana przez dzierżawcę: import pakietu jurysdykcyjnego zasila system gotowymi rolami (takimi jak Request Coordinator — faktyczna rola urzędnika ds. dostępu i prywatności), które możesz przemianować lub dostosować w Settings > Roles & Permissions. Przejdź do Settings > Manage Users, kliknij Add User, wyszukaj użytkowników w swoim katalogu i przypisz co najmniej jednego Administratora i jednego koordynatora; dostęp Custodian, Contributor, Reviewer i Reader wynika automatycznie z pracy przydzielanej poszczególnym osobom.
AccessPoint jest teraz gotowy do użycia.
Aktualizowanie AccessPoint
AccessPoint informuje Cię, gdy dostępna jest nowsza wersja — nie musisz niczego subskrybować ani ręcznie sprawdzać:
- Podczas rutynowej walidacji licencji Platforma Realizer zgłasza najnowszą opublikowaną wersję AccessPoint (wersję ostatnio promowaną do kanału wydań klienckich). Żadne dane użycia ani sprawy nie biorą udziału w tej kontroli.
- Gdy opublikowana wersja jest nowsza niż ta, na której działa Twoje API, administratorzy widzą powiadomienie Dostępna aktualizacja na pulpicie oraz w Konfiguracji, pokazujące bieżący i najnowszy numer wersji.
- Gdy jesteś aktualny (lub działasz na wersji przedpremierowej nowszej niż opublikowane wydanie), Konfiguracja pokazuje komunikat „Twoje API AccessPoint jest aktualne."
Aby zastosować aktualizację:
- W Settings > Setup kliknij Deploy update to Azure. Otwiera to portal Azure z najnowszym szablonem ARM — tym samym szablonem używanym przy wdrożeniu początkowym.
- Wybierz typ wdrożenia Aktualizacja istniejącej instalacji. Zachowuje to ustawienia aplikacji dodane przez operatora i pozostawia dostęp do bazy danych bez zmian; schemat bazy danych aktualizuje się automatycznie przy starcie API (migracja DacPac).
- Zaktualizuj pakiet SPFx: prześlij najnowszy
accesspoint.sppkgdo swojego App Catalog (Krok 2 powyżej). Zaktualizuj pakiet aplikacji Teams w Teams Admin Center, jeśli wydano nowyaccesspoint-teams.zip. - Odwiedź ponownie stronę Finish Setup po aktualizacji — idempotentnie przyznaje ona wszelkie uprawnienia Graph wprowadzone od czasu Twojego pierwotnego wdrożenia.
Dane przykładowe dla dzierżawców ewaluacyjnych. Na potrzeby środowisk demonstracyjnych i ewaluacyjnych osobny web part AccessPoint DevTools (
accesspoint-devtools.sppkg) może zresetować dzierżawcę i zasilić go przykładowymi danymi odpowiednimi dla danej jurysdykcji — przykładowych użytkowników, wnioski, zlecenia i wygenerowane dokumenty — za pomocą jednego kliknięcia Rebuild demo. Wykorzystuje połączenie API głównej aplikacji i deklaruje własne uprawnienia API (zatwierdź je jednorazowo w SharePoint Admin > Advanced > API access). Nie dla środowiska produkcyjnego: destrukcyjne endpointy resetu aktywują się wyłącznie wtedy, gdy ustawiona jest opcja App ServiceDevTools:Enabled=true— wdrażaj ten pakiet wyłącznie w dzierżawcach dev/demo.
Prywatność danych w powiadomieniach Teams (opcjonalnie)
Wszystkie rekordy wniosków, dane osobowe wnioskodawcy, dokumenty oraz historia audytu znajdują się wyłącznie w Twojej własnej dzierżawie. Powiadomienia respektują tę samą zasadę. AccessPoint dostarcza każde powiadomienie na maksymalnie trzech kanałach, a dwa z nich nigdy nie opuszczają Twojej dzierżawy: kanał w aplikacji (obsługiwany z Twojego własnego API) oraz e-mail/Outlook (wysyłany z Twojej własnej współdzielonej skrzynki pocztowej za pomocą Mail.Send). Kanał aktywności Teams jest jedynym kanałem, który w trybie domyślnym wysyła metodą POST niewielki ładunek danych do API Platformy Realizer — co ma miejsce wyłącznie dlatego, że Microsoft Graph wymaga, aby powiadomienie o aktywności zostało wysłane przez aplikację będącą właścicielem manifestu Teams. Wydawca nie przechowuje żadnej z tych danych i rejestruje wyłącznie identyfikatory GUID odbiorcy i dzierżawcy, a te same powiadomienia i tak docierają e-mailem oraz w aplikacji. Dwa mechanizmy pozwalają to jeszcze bardziej ograniczyć lub całkowicie wyeliminować:
Minimalizacja (przełącznik). W Settings > Setup > Teams Notifications włącz Minimise Teams notification content (privacy). Przekazywany ładunek danych zastępuje wówczas tytuł/tekst podglądu powiadomienia oraz nazwisko działającego użytkownika neutralnymi symbolami zastępczymi, dzięki czemu żadne nazwy zleceń/zadań, treść powiadomienia ani nazwiska osobowe nie opuszczają dzierżawy — nadal przesyłane są wyłącznie typ aktywności, numer wniosku i identyfikatory rekordu, aby powiadomienie mogło zostać poprawnie skierowane i zawierać głęboki link. Pełny tekst nadal wyświetla się w kanale w aplikacji. Nie jest wymagana żadna zmiana manifestu. (W tle: ustawienie dzierżawcy Notifications:TeamsMinimalPayload.)
Eliminacja (samodzielne hostowanie przekaźnika). Dzierżawca, który nie może wysyłać żadnych danych powiadomień do wydawcy, może sprawić, że jego własne API będzie wywoływać Graph bezpośrednio, korzystając z własnej tożsamości zarządzanej, dzięki czemu nic nie dotrze do api.realizer.io:
- Przyznaj uprawnienie
TeamsActivity.Send(aplikacyjne) tożsamości zarządzanej API i udziel zgody administratora (admin consent) — Graph pozwala wysyłać powiadomienia o aktywności wyłącznie aplikacji będącej właścicielem manifestu Teams, więc wysyłająca tożsamość musi odpowiadaćwebApplicationInfo.idz manifestu. - Wskaż w manifeście Teams własną aplikację. W pliku
manifest.jsonustawwebApplicationInfo.idna identyfikator klienta Twojej rejestracji aplikacji API / tożsamości zarządzanej (zastępując identyfikator aplikacji wydawcy), pozostawiającwebApplicationInfo.resourcejako domenę witryny SharePoint. Prześlij zmodyfikowany plik zip bezpośrednio w Teams Admin Center — nie używaj funkcji SharePoint „Sync to Teams” (nadpisuje onawebApplicationInfo). - Przełącz API na przekaźnik bezpośredni (Direct) — dodaj ustawienie App Service
Notifications__TeamsRelayMode=Direct(domyślnie/nieustawione =Publisher) i uruchom ponownie. API wywołuje terazsendActivityNotificationsamodzielnie; nadanie uprawnień aplikacji enterprise wydawcy nie jest już potrzebne do powiadomień. - Zweryfikuj ponownie — wyślij testowe powiadomienie (potwierdź, że zawiera głęboki link) i upewnij się, że osobista karta Teams nadal pozwala się zalogować, ponieważ zmieniono
webApplicationInfo.id.
Przekaźnik bezpośredni utrzymuje 100% treści powiadomień w dzierżawie, ale oznacza konieczność utrzymywania niestandardowego manifestu Teams i ponownego udzielania zgody przy zmianie identyfikatora aplikacji. Większość dzierżawców, którzy muszą jedynie ukryć dowolny tekst i nazwiska osobowe, powinna zamiast tego użyć przełącznika Minimalizacja — bez zmiany manifestu, a powiadomienie nadal zawiera głęboki link.
Wdrożenie wielodzierżawcowe
Zastosuj ten wzorzec, gdy backend Azure znajduje się w innej dzierżawie Entra ID niż Twoja dzierżawa Microsoft 365 — na przykład zespół usług wspólnych obsługujący kilka jednostek biznesowych, dostawca MSP hostujący usługę dla klientów, lub rozdzielone dzierżawy Azure/M365 z powodów zarządczych. Pojedyncze wdrożenie może obsługiwać wiele dzierżaw M365: API izoluje dane według identyfikatora dzierżawcy zawartego w tokenie każdego użytkownika, stosując filtry zapytań do bazy danych ograniczone do danej dzierżawy oraz ścieżki blobów z prefiksem dzierżawcy. Każda dzierżawa M365 nadal wymaga własnej licencji, własnego wdrożenia SPFx i zatwierdzeń uprawnień API oraz własnych poświadczeń Graph i skrzynki powiadomień.
Rejestracja aplikacji Graph. Managed identity działa wyłącznie we własnej dzierżawie macierzystej, dlatego utwórz jednodzierżawcową rejestrację aplikacji w dzierżawie M365 (np. AccessPoint Graph Connector), przyznaj jej te same uprawnienia aplikacji Graph wymienione w kroku 1 wraz ze zgodą administratora (admin consent), a następnie utwórz sekret klienta i połącz go z App Service za pośrednictwem 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
Nigdy nie przechowuj sekretu bezpośrednio w ustawieniach App Service; managed identity App Service musi mieć rolę Key Vault Secrets User w magazynie kluczy. Gdy obecne są wszystkie trzy ustawienia Graph__*, API korzysta z rejestracji aplikacji; gdy ich brak, powraca do managed identity w przypadku wdrożeń w tej samej dzierżawie.
Skrzynka współdzielona i zasady dostępu aplikacji. Utwórz w dzierżawie M365 nielicencjonowaną skrzynkę współdzieloną na potrzeby powiadomień e-mail i ogranicz Mail.Send tak, aby aplikacja mogła wysyłać wiadomości wyłącznie z tej jednej skrzynki:
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
Następnie każda dzierżawa M365 powtarza kroki 2–5 (aplikacje, zatwierdzenia, adres URL API — ten sam adres URL API obsługuje wszystkie dzierżawy). Powiadomienia w kanale aktywności Teams dodatkowo wymagają zgody administratora dla aplikacji korporacyjnej Realizer oraz zainstalowanej dla użytkowników aplikacji Teams; szczegóły znajdziesz w Konfiguracji wstępnej.
Wycofywanie zmian i operacje
Standardowe mechanizmy Azure obejmują wycofywanie zmian: ponowne wdrożenie poprzedniego pakietu API z historii Deployment Center App Service, przywrócenie Azure SQL za pomocą przywracania do punktu w czasie (do 35 dni) oraz ponowne przesłanie poprzedniej wersji pliku .sppkg do katalogu aplikacji. Importy pakietów jurysdykcyjnych są addytywne i można je cofnąć poprzez przywrócenie bazy danych. Pełny plan operacyjny — szczegółowe procedury wycofywania zmian, monitorowanie i zadania konserwacyjne — uzyskasz, kontaktując się z naszym zespołem wsparcia.