M365Con 2027 – bezpłatna konferencja online · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Jak zbudować niezawodne webhooki Microsoft Graph dla SharePoint i Microsoft 365

By ·

Zbuduj niezawodne webhooki Microsoft Graph dla SharePoint i Microsoft 365 z bezpieczną walidacją, automatycznym odnawianiem i solidnym dostarczaniem powiadomień.

Automatically translated with AI from the original post. Read the English original

▶ BLOGHow to Build ReliableMicrosoft Graph Webhoo……M365.FM
Titelbild: How to Build Reliable Microsoft Graph Webhooks for SharePoint and M365

Budowa niezawodnych webhooków Microsoft Graph dla SharePoint i Microsoft 365 potrafi sprawić kłopot nawet doświadczonym programistom. Może pojawić się błąd walidacji, jeśli Twój punkt końcowy nie odeśle tokenu walidacyjnego albo nie zwróci statusu 200 OK. Do częstych problemów należą punkty końcowe blokowane przez zapory sieciowe, błędna konfiguracja sieci lub ingerencja oprogramowania pośredniczącego. Pominięte ponowienia i wygasłe subskrypcje często wynikają z tego, że usługa nie otrzymuje żądania walidacyjnego albo punkty końcowe nie są dostępne publicznie. Dowiesz się, jak unikać tych pułapek i zbudować solidny, bezpieczny potok powiadomień, wraz z praktyczną listą kontrolną i sprawdzonymi metodami.

Najważniejsze wnioski

Podstawy webhooków Microsoft Graph

Czym są webhooki Microsoft Graph

Webhook to żądanie HTTP wywoływane zdarzeniem w systemie źródłowym i wysyłane do systemu docelowego, często wraz z danymi w ładunku. Webhooki działają automatycznie, czyli są wysyłane od razu po wystąpieniu zdarzenia w systemie źródłowym.

Webhooków Microsoft Graph używa się do otrzymywania powiadomień o zmianach w środowisku Microsoft 365 w czasie rzeczywistym. Oznacza to, że nie trzeba stale odpytywać Microsoft Graph o aktualizacje. Zamiast tego aplikacja otrzymuje powiadomienie, gdy tylko wydarzy się coś ważnego. Dzięki temu dane są na bieżąco zsynchronizowane z danymi dostępnymi przez Microsoft Graph. Eliminuje to także potrzebę infrastruktury odpytywania, w której często wysyła się żądania do Microsoft Graph, aby sprawdzić najnowsze zmiany.

Powiadomienia można skonfigurować dla wielu typów zdarzeń, na przykład:

Na przykład możesz chcieć automatycznie utworzyć konto w zewnętrznym systemie rejestracji czasu pracy, gdy nowy użytkownik dołączy do organizacji. Można też uruchamiać przetwarzanie treści, na przykład rozliczanie wydatków, gdy ktoś doda nowy plik do biblioteki dokumentów SharePoint lub folderu w OneDrive.

Dlaczego niezawodność ma znaczenie

Webhooki Microsoft Graph odgrywają kluczową rolę w tym, aby integracje z SharePoint i Microsoft 365 reagowały szybko i były aktualne. Gdy potok webhooków działa niezawodnie, aplikacje reagują na zmiany w czasie rzeczywistym. Użytkownicy zawsze widzą najbardziej aktualne dane, co poprawia ich doświadczenia i ogranicza ryzyko korzystania z nieaktualnych informacji.

Problemy z niezawodnością mogą jednak prowadzić do poważnych konsekwencji:

Aby zbudować solidne rozwiązanie, warto połączyć webhooki z zapytaniami delta, aby efektywnie śledzić zmiany. Trzeba też ustawić procesy regularnego sprawdzania i odnawiania subskrypcji. W przypadku zasobów, które często się aktualizują, grupowanie żądań pomaga kontrolować obciążenie.

Konfiguracja i walidacja webhooków

Konfigurowanie webhooków Microsoft Graph dla usługi SharePoint i Microsoft 365 wymaga kilku ważnych kroków. Trzeba zarejestrować webhook, obsłużyć żądania walidacyjne i zabezpieczyć punkt końcowy. Każdy z tych kroków odgrywa kluczową rolę w zapewnieniu, że potok powiadomień działa niezawodnie i bezpiecznie.

Rejestrowanie webhooków Microsoft Graph

Zaczynasz od utworzenia subskrypcji webhook. Dzięki temu aplikacja może otrzymywać powiadomienia o zmianach w zasobach Microsoft 365. Aby zarejestrować webhook, wykonaj następujące kroki:

  1. Utwórz publicznie dostępny punkt końcowy korzystający z protokołu HTTPS. Ten punkt końcowy będzie odbierał powiadomienia z Microsoft Graph.

  2. Wyślij żądanie POST do punktu końcowego /subscriptions w Microsoft Graph.

  3. W żądaniu subskrypcji określ:

    • changeType: typy zmian, które chcesz śledzić, na przykład „created”, „updated” lub „deleted”.

    • notificationUrl: adres URL Twojego punktu końcowego webhooka.

    • resource: zasób, który chcesz monitorować, na przykład „/users” lub „/drive/root”.

    • expirationDateTime: datę i godzinę, o których subskrypcja ma wygasnąć.

    • Opcjonalne właściwości, takie jak clientState, pomagają zweryfikować źródło powiadomień.

Przykładowe żądanie subskrypcji:

POST https://graph.microsoft.com/v1.0/subscriptions
Authorization: bearer eyJ0eXAiOiJ[..]
Content-Type: application/json

{
  "changeType": "updated",
  "clientState": "SecretClientState",
  "notificationUrl": "https://yourdomain.com/api/notifications",
  "resource": "/users",
  "expirationDateTime": "2024-05-01T00:00:00.0000000+00:00"
}

Musisz upewnić się, że Twój punkt końcowy jest publicznie dostępny i zabezpieczony protokołem HTTPS. Microsoft Graph sprawdza adres URL powiadomień, zanim zakończy tworzenie subskrypcji. Subskrypcje trzeba regularnie odnawiać, aby nadal otrzymywać powiadomienia. Punkt końcowy powinien zwracać szybkie i spójne odpowiedzi HTTP, aby nie przegapić żadnych powiadomień.

Oto podsumowanie wymaganych pól rejestracji:

Pole

Opis

changeType

Określa typ zmiany, która uruchamia powiadomienie (np. „updated”).

clientState

Niestandardowy ciąg znaków, który pomaga zweryfikować źródło powiadomienia.

notificationUrl

Punkt końcowy, pod który będą wysyłane powiadomienia.

resource

Monitorowany zasób (np. „/users”).

expirationDateTime

Data i godzina, o których subskrypcja wygaśnie.

validationToken

Token, który musi zostać zwrócony w odpowiedzi, aby zweryfikować żądanie subskrypcji.

Obsługa żądań walidacyjnych

Po zarejestrowaniu webhooka Microsoft Graph wysyła żądanie walidacyjne do Twojego punktu końcowego. Aby zakończyć proces subskrypcji, musisz poprawnie na nie odpowiedzieć. Gdy punkt końcowy otrzyma żądanie GET z parametrem zapytania validationToken, należy zwrócić ten token w treści odpowiedzi jako zwykły tekst oraz kod stanu 200 OK.

Typ żądania

URL

Parametr zapytania

Oczekiwany stan odpowiedzi

Content-Type

Treść odpowiedzi

GET

https://yourdomain.com

validationToken=1234

200 OK

text/plain

1234

💡 Wskazówka: Szybka i poprawna odpowiedź na żądania walidacyjne sprawia, że subskrypcja webhooka aktywuje się bez problemów.

Protokół HTTPS i zabezpieczenie punktu końcowego

Zabezpieczenie punktu końcowego webhooka jest kluczowe. Webhooki Microsoft Graph wymagają szyfrowania HTTPS, aby chronić wrażliwe dane podczas komunikacji. Przychodzące żądania warto weryfikować, sprawdzając podpis utworzony przy użyciu współdzielonego klucza tajnego. Używaj złożonych, losowo generowanych ścieżek dla adresów URL wywołań zwrotnych, aby były trudniejsze do odgadnięcia.

Każde wywołanie webhooka zawiera podpisany token JSON Web Token (JWT) w nagłówku Authentication przychodzącego żądania HTTPS. Aby upewnić się, że token nie został zmieniony, możesz zastosować standardowe techniki walidacji JWT zgodne z OpenID Connect.

Wszystkie punkty końcowe webhooków muszą korzystać z protokołu HTTPS. Wymóg ten chroni Twoje dane i zapewnia zgodność ze standardami bezpieczeństwa Microsoft. Zabezpieczenie punktu końcowego pomaga zapobiegać nieautoryzowanemu dostępowi i atakom.

Dzięki tym krokom konfigurujesz niezawodny i bezpieczny potok Microsoft Graph Webhooks dla usługi SharePoint i Microsoft 365. Dzięki temu Twoja aplikacja otrzymuje powiadomienia szybko i bezpiecznie.

Przetwarzanie i zabezpieczanie powiadomień

Po skonfigurowaniu punktu końcowego webhooka musisz bezpiecznie i niezawodnie przetwarzać przychodzące powiadomienia. Ten krok gwarantuje, że Twoja aplikacja akceptuje wyłącznie prawidłowe żądania i nie pomija ważnych aktualizacji z Microsoft Graph Webhooks.

Uwierzytelnianie i weryfikacja tokenów JWT

Każde powiadomienie z Microsoft Graph zawiera token JSON Web Token (JWT) w nagłówku Authorization. Przed przetworzeniem jakiegokolwiek ładunku musisz zweryfikować ten token. Prawidłowa walidacja JWT chroni system przed nieautoryzowanymi lub zmodyfikowanymi żądaniami.

Aby uwierzytelnić i zweryfikować tokeny JWT, wykonaj następujące kroki:

  1. Sprawdź, czy token nie wygasł. Tokeny zawierają czas ważności, dlatego każdy token po jego upływie należy odrzucić.

  2. Potwierdź, że token został wystawiony przez platformę tożsamości Microsoft. Zweryfikuj podpis tokenu, aby upewnić się, że nie został zmieniony.

  3. Upewnij się, że oświadczenie „audience” w tokenie odpowiada identyfikatorowi Twojej aplikacji. Ten krok potwierdza, że token był przeznaczony właśnie dla Twojej aplikacji.

  4. Sprawdź, czy właściwość azp (authorized party) ma wartość oczekiwaną dla Twojej aplikacji.

Wskazówka: Do walidacji JWT zawsze używaj zaufanych bibliotek. Pomagają one uniknąć typowych błędów i utrzymać bezpieczeństwo aplikacji.

Podczas obsługi tokenów JWT warto również zwrócić uwagę na typowe luki w zabezpieczeniach:

Dzięki tym krokom i środkom ostrożności masz pewność, że do Twojej aplikacji docierają wyłącznie prawidłowe powiadomienia.

Obsługa ładunków powiadomień

Po uwierzytelnieniu powiadomienia musisz bezpiecznie przetworzyć jego ładunek. Ładunki powiadomień zawierają informacje o zdarzeniu, które uruchomiło webhook. Aby zachować integralność danych i zapobiec problemom z bezpieczeństwem, powinieneś:

Uwaga: Walidacja i oczyszczanie ładunków chroni system przed nieprawidłowymi danymi i zagrożeniami bezpieczeństwa.

Wdrażanie logiki ponawiania i wycofywania

Problemy z siecią lub tymczasowe awarie mogą spowodować niepowodzenie dostarczenia powiadomienia. Aby uniknąć utraty danych, potrzebujesz solidnej strategii ponawiania i wycofywania. Microsoft zaleca stosowanie wykładniczego wycofywania (exponential backoff) oraz ustrukturyzowanych kolejek do zarządzania ponowieniami.

Poniżej znajduje się tabela podsumowująca typowe mechanizmy ponawiania i wycofywania:

Typ mechanizmu

Opis

Wykładnicze wycofywanie

Zwiększa wykładniczo czas oczekiwania między ponowieniami po każdym niepowodzeniu.

Główna kolejka

Początkowa kolejka, do której publikowane są zdarzenia webhooka, na przykład main.webhook.queue.

Kolejki ponowień

Kolejki do obsługi ponowień, nazwane retry.webhook.queue-M, gdzie M to numer próby.

Kolejka porzuconych

Ostateczna kolejka dla wiadomości, których przetworzenie nie powiodło się po wszystkich próbach ponowienia, na przykład abandon.webhook.queue.

Obliczanie TTL

Czas życia (TTL) każdej kolejki ponowień wyznacza wzór: {interval} + {current_retry_attempt} ^ 4.

Nagłówek x-retry

Nagłówek, który śledzi liczbę prób ponowienia dla każdej wiadomości.

Dead Letter Exchange

Wymiana, która odbiera wiadomości, których nie można już ponowić, i kieruje je do kolejki porzuconych.

Jeśli nie wdrożysz odpowiedniej logiki ponowień i wycofywania (backoff), aplikacja naraża się na utratę powiadomień lub niespójność danych. Nieudane żądania lub ograniczenia szybkości mogą uniemożliwić odbieranie krytycznych aktualizacji. Wykładnicze wycofywanie pomaga zarządzać żądaniami objętymi ograniczeniami i zmniejsza ryzyko przeciążenia systemu lub usługi Microsoft Graph Webhooks.

🛡️ Najlepsza praktyka: Zawsze śledź próby ponowienia i po kilku nieudanych próbach przenoś wiadomości do kolejki porzuconych. Takie podejście pozwala zbadać i rozwiązać trwałe problemy bez utraty danych.

Dzięki uwierzytelnianiu tokenów JWT, walidacji ładunków i wdrożeniu niezawodnej logiki ponowień tworzysz bezpieczny i odporny potok powiadomień. Te kroki pozwalają bezpiecznie i wydajnie przetwarzać każde powiadomienie z usługi Microsoft Graph Webhooks.

Zarządzanie subskrypcjami i śledzenie zmian

Automatyzacja odnawiania subskrypcji

Aby nie przegapić powiadomień, musisz utrzymywać aktywne subskrypcje webhooków. Subskrypcje Microsoft Graph wygasają po określonym czasie. Jeśli ich nie odnowisz, aplikacja przestanie otrzymywać aktualizacje. Odnawianie możesz zautomatyzować na kilka sposobów:

Wskazówka: Automatyzacja odnawiania ogranicza pracę ręczną i gwarantuje, że system pozostaje połączony z usługą Microsoft Graph.

Monitorowanie i alerty

Musisz monitorować stan potoku webhooków. Skonfiguruj alerty, które powiadomią Cię, jeśli subskrypcja nie zostanie odnowiona lub punkt końcowy przestanie odpowiadać. Używaj logowania, aby śledzić przychodzące powiadomienia i próby odnowienia. Dzięki temu wykryjesz problemy, zanim wpłyną na użytkowników.

🛎️ Proaktywne monitorowanie pozwala szybko naprawiać problemy i utrzymać niezawodność integracji.

Śledzenie zmian za pomocą zapytań delta

Zapytania delta pozwalają śledzić zmiany w zasobach SharePoint i Microsoft 365 w sposób wydajny. Dzięki nim możesz pobierać wyłącznie nowe lub zaktualizowane dane, co ogranicza potrzebę częstego odpytywania i zmniejsza ryzyko ograniczeń szybkości.

Zapytania delta mają jednak pewne ograniczenia:

Ograniczenie/wyzwanie

Opis

Kontekst OData

Niepoprawnie zwracane podczas śledzenia zmian w relacjach.

Rozszerzenia schematu

Nie są zwracane z instrukcją $select, ale są zwracane bez niej.

Otwarte rozszerzenia

Klienci nie mogą śledzić zmian w otwartych rozszerzeniach ani w zarejestrowanych rozszerzeniach schematu.

Uwaga: Zawsze testuj wdrożenie zapytań delta, aby uwzględnić te ograniczenia i zapewnić dokładne śledzenie zmian.

Dzięki automatyzacji odnawiania, monitorowaniu potoku i zapytaniom delta budujesz niezawodny i wydajny system webhooków dla SharePoint i Microsoft 365.

Możesz budować niezawodne webhooki Microsoft Graph, postępując zgodnie z jasnym procesem. Zacznij od utworzenia subskrypcji i użycia zapytań delta, aby śledzić zmiany. Automatyzuj odnawianie subskrypcji i monitoruj potok pod kątem problemów. Na każdym etapie stawiaj na walidację, bezpieczeństwo i odporność. Aby ocenić gotowość do wdrożenia produkcyjnego, przejrzyj tę listę kontrolną:

Typ miary

Opis

Skanowanie zabezpieczeń potoku CI

Skanuj pod kątem luk w zabezpieczeniach przed wdrożeniem.

Automatyczna ścieżka audytu

Rejestruj każdy build i wdrożenie na potrzeby zgodności i audytów.

Stosuj te najlepsze praktyki, aby integracje z usługami SharePoint i Microsoft 365 pozostawały niezawodne.

Najważniejsze wnioski

Jak odnowić wygasłą subskrypcję webhooka Microsoft Graph?

Wyślij żądanie PATCH do punktu końcowego /subscriptions/{id} w Microsoft Graph. Zaktualizuj pole expirationDateTime. Zaplanuj uruchamianie tego procesu codziennie. Dzięki temu subskrypcje pozostają aktywne, a powiadomienia nie są pomijane.

Co zrobić, jeśli punkt końcowy webhooka nie przejdzie walidacji?

Sprawdź, czy punkt końcowy zwraca validationToken jako zwykły tekst w treści odpowiedzi. Odpowiadaj statusem 200 OK. Upewnij się, że punkt końcowy jest publicznie dostępny i używa protokołu HTTPS.

Jak zabezpieczyć punkt końcowy webhooka?

Używaj protokołu HTTPS dla wszystkich punktów końcowych. Weryfikuj tokeny JWT w każdym żądaniu. Ogranicz dostęp za pomocą uwierzytelniania i listy dozwolonych adresów IP. Monitoruj nietypową aktywność. Regularnie audytuj ustawienia zabezpieczeń.

Dlaczego w przypadku webhooków należy używać zapytań delta?

Zapytania delta pozwalają śledzić wyłącznie nowe lub zmienione dane. Zmniejsza to zużycie przepustowości i poprawia wydajność. Nie musisz za każdym razem pobierać wszystkich danych, dzięki czemu integracja jest szybsza i bardziej efektywna.

Jaki jest najlepszy sposób obsługi nieudanych powiadomień webhooka?

Zaimplementuj logikę ponawiania z wykładniczym wydłużaniem przerw (exponential backoff). Śledź próby ponowienia za pomocą nagłówków lub kolejek. Przenoś komunikaty, które zakończyły się niepowodzeniem po kilku ponowieniach, do kolejki porzuconych elementów. Analizuj te błędy, aby zapobiec utracie danych.

Microsoft Graph Change notifications and webhooks SharePoint OneDrive Microsoft 365

Related articles

RSS