Jak zbudować niezawodne webhooki Microsoft Graph dla SharePoint i Microsoft 365
By Mirko Peters ·
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
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
Webhooki Microsoft Graph zapewniają powiadomienia o zmianach w Microsoft 365 w czasie rzeczywistym, eliminując potrzebę ciągłego odpytywania.
Upewnij się, że punkt końcowy webhooka jest dostępny publicznie i używa protokołu HTTPS, aby zachować bezpieczeństwo i niezawodność.
Szybko odpowiadaj na żądania walidacyjne, odsyłając token walidacyjny, aby pomyślnie aktywować subskrypcję webhooka.
Wdróż solidną strategię ponawiania prób z wydłużającymi się przerwami, aby obsługiwać błędy dostarczania powiadomień i zapobiegać utracie danych.
Automatyzuj odnawianie subskrypcji i monitoruj potok webhooków, aby zapewnić ciągłe i niezawodne powiadomienia.
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:
Wiadomości
Wydarzenia
Kontakty
Użytkownicy
Grupy
Konwersacje
Pliki w OneDrive
Alerty
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:
Awarie webhooków mogą zakłócać działanie aplikacji, jeśli nie zostaną odpowiednio obsłużone.
Nagłe skoki ruchu mogą przeciążyć serwery, prowadząc do przestojów i utraty żądań webhooków.
Brak obsługi webhooków może skutkować utratą danych i niespójnościami, jeśli nie ma mechanizmu ponownego przesyłania.
Niezabezpieczone adresy URL webhooków mogą zostać wykorzystane przez atakujących do wysyłania uszkodzonych danych.
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:
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.
Wyślij żądanie POST do punktu końcowego
/subscriptionsw Microsoft Graph.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 | Content-Type | Treść odpowiedzi | |
|---|---|---|---|---|---|
GET | validationToken=1234 | 200 OK | text/plain | 1234 |
Brak zwrócenia validationToken powoduje błąd walidacji. Oznacza to, że Microsoft Graph nie może potwierdzić punktu końcowego i nie będziesz otrzymywać powiadomień.
Warto użyć właściwości clientState, aby sprawdzić, czy żądania pochodzą z Twojej subskrypcji.
Zawsze zwracaj validationToken w treści odpowiedzi jako zwykły tekst w ciągu 10 sekund.
💡 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.
Dodaj listę dozwolonych adresów IP (IP whitelisting) dla punktów końcowych API Microsoft Graph.
Uwzględnij tokeny uwierzytelniania w nagłówkach żądań.
Monitoruj wykorzystanie API, aby wykrywać nietypowe wzorce lub skoki aktywności.
Ogranicz dostęp do API Microsoft Graph i Outlook. Dostęp powinny mieć wyłącznie upoważnione osoby, a Ty powinieneś wymusić uwierzytelnianie wieloskładnikowe.
Wdrażaj zaawansowane rozwiązania zabezpieczeń punktów końcowych, które wykorzystują analitykę behawioralną i uczenie maszynowe do wykrywania zagrożeń.
Przeprowadzaj regularne audyty bezpieczeństwa, aby znajdować luki i je usuwać.
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:
Sprawdź, czy token nie wygasł. Tokeny zawierają czas ważności, dlatego każdy token po jego upływie należy odrzucić.
Potwierdź, że token został wystawiony przez platformę tożsamości Microsoft. Zweryfikuj podpis tokenu, aby upewnić się, że nie został zmieniony.
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.
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:
Brak weryfikacji podpisu JWT może pozwolić atakującym na zmianę zawartości tokenu bez wykrycia.
Użycie algorytmu „none” podczas przetwarzania JWT umożliwia atakującym ominięcie kontroli podpisu.
Słabe sekrety podpisujące ułatwiają atakującym fałszowanie prawidłowych tokenów.
Atakujący mogą wstrzykiwać określone parametry do nagłówka JOSE, aby manipulować sposobem przetwarzania tokenów JWT przez Twój system.
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ś:
Sprawdzić, czy w ładunku znajdują się wszystkie wymagane pola. Brakujące pola mogą powodować błędy lub niepełne przetwarzanie.
Oczyść wszystkie pola tekstowe przed ich wyświetleniem lub zapisaniem w bazie danych. Ten krok zapobiega atakom typu injection i uszkodzeniu danych.
Użyj walidacji schematu, aby upewnić się, że ładunek ma oczekiwaną strukturę. Walidacja schematu pomaga wychwycić nieoczekiwane zmiany lub nieprawidłowo sformatowane dane.
Przygotuj kod na możliwe zmiany wersji API. Elastyczne parsowanie gwarantuje, że aplikacja nadal będzie działać, nawet jeśli Microsoft zaktualizuje format ładunku.
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 |
Kolejki ponowień | Kolejki do obsługi ponowień, nazwane |
Kolejka porzuconych | Ostateczna kolejka dla wiadomości, których przetworzenie nie powiodło się po wszystkich próbach ponowienia, na przykład |
Obliczanie TTL | Czas życia (TTL) każdej kolejki ponowień wyznacza wzór: |
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:
Wysyłaj żądania HTTP PATCH, aby zaktualizować datę wygaśnięcia każdej subskrypcji.
Zaplanuj uruchamianie tych żądań PATCH codziennie. Dzięki temu subskrypcje pozostają aktualne i nie wygasają nieoczekiwanie.
Śledź znacznik czasu wygaśnięcia każdej subskrypcji. Odnawiaj każdą subskrypcję, która zbliża się do wygaśnięcia.
Jeśli subskrypcja wygaśnie, natychmiast utwórz nową, aby przywrócić przepływ powiadomień.
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.
Monitoruj stan subskrypcji i daty wygaśnięcia.
Skonfiguruj alerty dla nieudanych odnowień i pominiętych powiadomień.
Rejestruj wszystkie zdarzenia webhooków i błędy na potrzeby rozwiązywania problemó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 pozwalają aplikacji śledzić zmiany bez pobierania wszystkich danych za każdym razem.
Dobrze współpracują z SharePoint i Microsoft 365, wysyłając powiadomienia tylko wtedy, gdy coś się zmieni.
Dzięki zapytaniom delta oszczędzasz przepustowość i poprawiasz wydajność.
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ą:
Aktualizuj dokumentację i informuj zespoły wsparcia.
Regularnie sprawdzaj stan subskrypcji.
Używaj skanowania zabezpieczeń potoku CI i prowadź ścieżki audytu.
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.