Microsoft Graph OAuth: Uwierzytelnianie skrzynki pocztowej Outlook i Microsoft 365
Kompletny przewodnik po Microsoft Graph OAuth dla deweloperów SaaS na rok 2026. Obejmuje rejestrację aplikacji Microsoft Entra, punkty końcowe autorytetu, zakresy poczty, uprawnienia delegowane i aplikacyjne, zgodę administratora, kod autoryzacyjny + PKCE, rotację tokenów odświeżania, kody błędów AADSTS oraz jak Unipile eliminuje 5 tygodni kodowania OAuth w 5 minut.
import żądania
# Krok 1: Wygeneruj link do uwierzytelniania w usłudze hostingowej
response = requests.stanowisko(
"https://apiXXX.unipile.com:XXX
/api/v1/hosted/accounts/link",
nagłówki={"X-API-KEY": klucz_api},
json={
"typ": "create",
"dostawcy": ["MICROSOFT"],
"api_url": twój_dsn,
"ważne do": "2026-12-31T23:59:59Z"
}
)
# Krok 2: Przekieruj użytkownika na adres URL
auth_url = response.json()["url"]
# Unipile obsługuje cały proces OAuth
# wraz z Entrą, lunetami, żetonami i odświeżeniemDlaczego Microsoft Graph OAuth jest nie do negocjacji w 2026 roku
Jeśli Twoja aplikacja SaaS odczytuje, wysyła lub synchronizuje pocztę e-mail Outlook lub Microsoft 365, uwierzytelnianie Microsoft Graph OAuth nie jest już opcjonalne. Trzy poważne wycofania sprawiły, że uwierzytelnianie podstawowe (Basic Auth), starsze protokoły i hasła aplikacji stały się przestarzałe. OAuth 2.0 za pośrednictwem interfejsu API Microsoft Graph jest jedyną obsługiwaną ścieżką.
3 przepływy OAuth, które obsługuje firma Microsoft (i których potrzebuje SaaS)
Platforma tożsamości firmy Microsoft obsługuje kilka typów przyznawania OAuth 2.0. Wybranie niewłaściwego jest częstym źródłem marnowania czasu inżynierów. Oto podsumowanie dla aplikacji SaaS, które uzyskują dostęp do poczty e-mail w imieniu użytkowników.
Rejestracja aplikacji Microsoft Entra: 7 kroków
Zanim Twoja aplikacja będzie mogła zażądać tokenów OAuth, musisz mieć zarejestrowaną aplikację w usłudze Microsoft Entra ID (wcześniej Azure Active Directory). Oto dokładne kroki, w tym, które wartości pól mają znaczenie, a które są kosmetyczne.
portal.azure.com, idź do Microsoft Entra ID (wyszukaj na górnym pasku), następnie Rejestracje aplikacji, a następnie kliknij + Nowa rejestracja. Zobacz pełna dokumentacja Microsoft OAuth aby uzyskać dodatkowe informacje.Konta w dowolnym katalogu organizacyjnym (dowolny tenant Microsoft Entra ID – wielodostępny) oraz osobiste konta Microsoft. odpowiada to /wspólny punkt końcowy autoryzacji./organizacje zarządza i zmniejsza powierzchnię zgody. Więcej na temat punktów końcowych autorytetu w sekcji 4.sieć dla aplikacji po stronie serwera. Użyj Aplikacja jednostronicowa dla przepływów po stronie klienta (automatycznie włącza PKCE).https://app.yourproduct.com/auth/microsoft/callback. Wymagane dokładne dopasowanie, jakiekolwiek odchylenie powoduje AADSTS50011.http://localhost:3000/callbackale produkcyjne identyfikatory URI muszą używać HTTPS. Zarejestruj oba oddzielnie.Mail.Read, dostęp offline, openid, profilMail.ReadWrite, Mail.Send, dostęp offline, openid, profilclient_id parametrze we wszystkich żądaniach uwierzytelniania./wspólny zamiast, ale zachowaj tę wartość dla adresów URL zgody administratora.Wybór odpowiedniego punktu końcowego autoryzacji firmy Microsoft
Adres URL urzędu (authority URL), którego używasz w żądaniach OAuth, określa, które typy kont Microsoft mogą się uwierzytelnić i jakie tokeny otrzymasz. Błędne skonfigurowanie tego powoduje ciche błędy, przez które niektórzy użytkownicy nie mogą się w ogóle uwierzytelnić.
| URL autorytetu | Akceptuje | Przypadek użycia | Zastrzeżenia |
|---|---|---|---|
| /wspólnyNajlepsze SaaS | Zarówno konta Microsoft Entra (służbowe/szkolne), jak i osobiste konta Microsoft (Outlook.com, Hotmail, Live) | Wielodostępna usługa SaaS obsługująca wszystkich użytkowników Microsoft. Jedno zakończenie obsługuje całą bazę użytkowników. | Token uwierzytelniający jest wystawiany przez główny tenant każdego użytkownika, a nie przez twojego. Weryfikacja tokenu musi używać wystawcy specyficznego dla tenantu lub akceptować wielu wystawców. Nie można wymusić zasad dostępu warunkowego. |
| /organizacje | Konta Microsoft Entra ID (służbowe/szkolne). Żadne osobiste konta Microsoft. | Rozwiązanie B2B SaaS skierowane wyłącznie do klientów korporacyjnych, nigdy do użytkowników indywidualnych Outlook.com. | Użytkownicy z osobistymi kontami Microsoft otrzymają błąd. Dopuszczalna prostsza walidacja tokenu (wzorzec pojedynczego wystawcy). |
| konsumenci | Tylko osobiste konta Microsoft (Outlook.com, Hotmail, Live). | Aplikacje konsumenckie skierowane do skrzynek odbiorczych. Rzadkość w przypadku SaaS B2B. | Konta Microsoft 365 dla firm są odrzucane. Nieprzydatne dla modelu SaaS obsługującego użytkowników biznesowych. |
| /{identyfikator-dzierżawcy} | Konta w określonym dzierżawcy Microsoft Entra. | Narzędzia wewnętrzne dla jednego dzierżawcy (aplikacja własnej firmy). Przepływy zgody administratora skierowane do określonego dzierżawcy. Używane również we wzorcach adresów URL przekierowań zgody administratora. | Każdy inny użytkownik dzierżawcy jest odrzucany. Odpowiednie tylko dla aplikacji wewnętrznych lub gdy celowo ograniczamy dostęp do dzierżawcy jednego klienta. |
/wspólny końcowy punkt, ten Iść (upoważniający) roszczenie w JWT będzie https://login.microsoftonline.com/{tenantId}/v2.0 gdzie {tenantId} różni się w zależności od użytkownika. Skonfiguruj swoją bibliotekę walidacji JWT, aby akceptowała dowolny pasujący wystawcę https://login.microsoftonline.com/{tenantId}/v2.0 zamiast stałego ciągu nadawcy.Zakresy poczty Microsoft Graph: Szczegółowy podział
Microsoft Graph używa zakresów uprawnień do kontrolowania tego, co może robić Twoja aplikacja. Zbyt wiele żądanych zakresów zwiększa tarcia na ekranie zgody i zmniejsza konwersję. Zbyt mało żądanych zakresów powoduje błędy w czasie wykonywania. Oto wszystkie zakresy poczty, które musisz znać.
| Zakres | Typ | Co umożliwia | Zgoda administratora? |
|---|---|---|---|
| Mail.Read | Delegowany | Przeczytaj wszystkie wiadomości w skrzynce pocztowej uwierzytelnionego użytkownika. Zawiera nagłówki, treść, załączniki. Tylko do odczytu – nie można modyfikować ani wysyłać. | Użytkownik |
| Mail.ReadBasic | Delegowany | Odczyt ograniczonej liczby właściwości wiadomości: temat, nadawca, odbiorcy, data. Nie można odczytać treści ani załączników wiadomości. Przydatne do lekkiego listowania skrzynki odbiorczej bez pełnego dostępu do treści. | Użytkownik |
| Mail.ReadWrite | Delegowany | Odczytuj i modyfikuj wszystkie wiadomości. Obejmuje tworzenie, aktualizowanie, usuwanie wiadomości i folderów. Nadzbiór Mail.Read - nie żądaj obu. | Użytkownik |
| Mail.Send | Delegowany | Wysyłaj wiadomości e-mail jako uwierzytelniony użytkownik. Wymagane, nawet jeśli masz również uprawnienia Mail.ReadWrite - wysyłanie jest osobnym uprawnieniem w Microsoft Graph. | Użytkownik |
| Mail.Read.Shared | Delegowany | Odczytywanie poczty w współdzielonych skrzynkach pocztowych lub skrzynkach pocztowych innych użytkowników, do których uwierzytelniony użytkownik otrzymał dostęp. Nie do odczytywania własnej skrzynki pocztowej użytkownika. | Użytkownik |
| Mail.ReadWrite.Shared | Delegowany | Odczytuj i modyfikuj wiadomości e-mail w współdzielonych skrzynkach pocztowych, do których użytkownik ma dostęp. | Użytkownik |
| Mail.Wyślij.Współdzielony | Delegowany | Wyślij e-mail z udostępnionych skrzynek pocztowych lub "Wyślij w imieniu" innego użytkownika (jeśli użytkownik udzielił dostępu). | Użytkownik |
| dostęp offline | Delegowany | Instruuje Microsoft, aby wydał token odświeżania. Bez niego otrzymujesz tylko krótko działający token dostępu, bez możliwości jego odnowienia. Zawsze wymagany dla aplikacji SaaS. | Użytkownik |
| openid | Delegowany | Zwraca token identyfikacyjny z podstawowymi danymi użytkownika. Wymagane, jeśli chcesz wiedzieć, kto się uwierzytelnił, bez wykonywania oddzielnego wywołania API /me. | Użytkownik |
| profil | Delegowany | Dodaje roszczenia name i preferred_username do tokenu ID. Zazwyczaj uwzględniane z openid. | Użytkownik |
| Mail.Odczyt (Aplikacja) | Zastosowanie | Odczytaj całą pocztę ze wszystkich skrzynek pocztowych w dzierżawie bez interakcji użytkownika. Używane przez usługi demona. Wymaga zgody administratora dzierżawy. | wymagany administrator |
| Mail.ReadWrite (Aplikacja) | Zastosowanie | Czytaj i zapisuj wszystkie wiadomości e-mail we wszystkich skrzynkach pocztowych najemców. Bardzo szerokie uprawnienia. Tylko dla zaufanych narzędzi wewnętrznych za wyraźną zgodą administratora najemcy. | wymagany administrator |
zakres=Mail.Readdostęp_offlineopenidprofil
zakres=Mail.ReadWriteMail.Senddostęp_offlineopenidprofil
Uprawnienia Delegowane a Uprawnienia Aplikacji: Kiedy Stosować Każde z Nich
Microsoft Graph wykorzystuje dwa zasadniczo różne modele uprawnień. Większość deweloperów SaaS domyślnie wybiera niewłaściwy, co prowadzi do niepotrzebnych wymagań zgody administratora i wadliwego doświadczenia użytkownika. Oto dokładnie, kiedy należy używać każdego z nich.
Auth Code + PKCE: Przykłady krok po kroku w Curl
Oto kompletny przepływ kodu autoryzacji OAuth 2.0 Microsoft Graph z PKCE, od generowania kodu weryfikującego do wymiany tokenów. Są to przykłady na poziomie produkcyjnym, które można bezpośrednio dostosować do stosu technologicznego.
import os, base64, hashlib
# 1. Wygeneruj code_verifier (43–128 znaków, kod base64 bezpieczny dla adresów URL)
code_verifier = base64.urlsafe_b64encode(
Myślę, że chodzi Ci o skrót "os.". Jeśli tak, to na język polski możemy go przetłumaczyć na kilka sposobów, w zależności od kontekstu:
* **Osoba** (np. w spisie rzeczy: "os. do kontaktu" - osoba do kontaktu)
* **Okręt podwodny** (w kontekście wojskowym)
* **Oś** (w kontekście technicznym lub geometrycznym)
Bez dodatkowego kontekstu trudno mi podać dokładne tłumaczenie.urandom(32)
).dekoduj('utf-8').rstrip('=')
# 2. Wygeneruj code_challenge = BASE64URL(SHA256(code_verifier))
wyzwanie_kodowania = base64.urlsafe_b64encode(
hashlib.sha256(kod_weryfikacyjny.koduj('utf-8')).streszczenie()
).dekoduj('utf-8').rstrip('=')
# Zapisz code_verifier w sesji – będzie potrzebny w kroku 4
# Prześlij kod_challenge w adresie URL autoryzacjikod - żąda kodu autoryzacyjnegodostęp offline dla tokenów odświeżania.S256 - zawsze używaj SHA-256, nigdy czysty# Utwórz adres URL autoryzacji (format ułatwiający czytanie)
AUTH_URL="https://login.microsoftonline.com/common/oauth2/v2.0/authorize
?client_id=TWÓJ_CLIENT_ID
&typ_odpowiedzi=kod
&redirect;_uri=https://app.com/auth/ms/cb
&scope;=Mail.ReadWriteMail.Sendoffline_access
&stan=LOSOWA_WARTOSC_STANU
&challenge_kod=TWÓJ_CODE_CHALLENGE
&code_challenge_method=S256"
# Przekieruj użytkownika na adres $AUTH_URL
# Microsoft obsługuje logowanie, uwierzytelnianie wieloskładnikowe (MFA) oraz ekran zgody
# W przypadku powodzenia: redirect_uri?code=AUTH_CODE&state;=...kod parametr zapytania. Zweryfikuj stan Parametr pasuje do tego, co wysłałeś. Kod wygasa za 10 minut – wymień go natychmiast w kroku 4.Kod autoryzacyjny platformy # dla tokenów
curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=TWÓJ_CLIENT_ID" \
-d "client_secret=TWÓJ_CLIENT_SECRET" \
-d "typ_dostępu=kod_autoryzacyjny" \
-d "kod=AUTORYZACJA_Z_POWIADOMIENIA" \
-d "redirect_uri=https://app.com/auth/ms/cb" \
-d "code_verifier=TWÓJ_CODE_VERIFIER" \
-d "scope=Mail.ReadWrite Mail.Send offline_access"{
"typ_tokenu": "Posiadacz",
"zakres": "Mail.ReadWrite Mail.Send offline_access",
"ważny_przez": 3600,
"token dostępu": "eyJ0eXAiOiJKV1Qi...",
"token_odświeżający": "0.ARoAi7W...",
"id_token": "eyJ0eXAi..."
}Obsługa tokenów odświeżania: rotacja, wygaśnięcie i dostęp warunkowy
Tokeny odświeżania Microsoft Graph są długożyjące, ale nie stałe. Kilka warunków może je cicho unieważnić. Zrozumienie tych przypadków brzegowych odróżnia produkcyjną integrację Microsoft OAuth od tej, która losowo psuje się u użytkowników korporacyjnych.
nieprawidłowe_poświadczenie obsłużyć błędy w sposób zgrabny i wyświetlić monit o ponowne uwierzytelnienie.nieprawidłowe_poświadczenie błąd.nieprawidłowe_poświadczenie. Jest to oczekiwane zachowanie - należy sobie z tym poradzić, oznaczając połączone konto jako wymagające ponownej autoryzacji.# Odśwież token dostępu przy użyciu zapisanego tokenu odświeżającego
curl -X POST "https://login.microsoftonline.com/common/oauth2/v2.0/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=TWÓJ_CLIENT_ID" \
-d "client_secret=TWÓJ_CLIENT_SECRET" \
-d "grant_type=refresh_token" \
-d "refresh_token=PRZECHOWYWANY_TOKEN_ODSWIEZAJACY" \
-d "scope=Mail.ReadWrite Mail.Send offline_access"
# Zawsze sprawdzaj, czy w odpowiedzi znajduje się nowy token odświeżający.
# Jeśli jest obecny, należy natychmiast wymienić go na nowy.
# Jeśli pojawi się błąd „invalid_grant”, poproś użytkownika o ponowne uwierzytelnienie.Typowe błędy AADSTS z objaśnieniem
Błędy Microsoft Graph OAuth przestrzegają spójnego wzorca kodów błędów AADSTS. Oto najczęstsze z nich, które napotkasz podczas tworzenia aplikacji i w produkcji, wraz z dokładnymi przyczynami źródłowymi i poprawkami.
| Kod błędu | Co to oznacza | Przyczyna źródłowa i rozwiązanie |
|---|---|---|
| AADSTS65001 | Nie udzielono zgody na jeden lub więcej z żądanych zakresów | Użytkownik nie wyraził zgody na zakresy aplikacji lub administrator dzierżawy zablokował zgodę użytkownika na aplikację. Poprawka: Uwzględnij zgoda w swoim adresie URL autoryzacji, aby wymusić ponowne wyświetlenie ekranu zgody, lub wysłać adres URL zgody administratora do administratora dzierżawy.Dodaj monit = zgoda lub poproś o zgodę administratora |
| AADSTS50011 | Niezgodność URI przekierowania | The przekierowanie_uri żądanie nie pasuje dokładnie do żadnego zarejestrowanego URI przekierowania w rejestracji aplikacji Entra. Nawet różnica w znaku ukośnika na końcu powoduje ten błąd. Rozwiązanie: Skopiuj dokładny URI z rejestracji aplikacji Entra i użyj go dokładnie tak, jak został podany.Naprawiono: dokładne dopasowanie identyfikatora URI w rejestracji aplikacji Entra |
| AADSTS700016 | Aplikacja nie znaleziona w dzierżawie | The client_id nie istnieje w dzierżawie, wobec której następuje uwierzytelnianie. Częste podczas używania urzędu specyficznego dla dzierżawy (/{identyfikator-dzierżawcy}) dla aplikacji wielodostępnej. Poprawka: Użyj /wspólny lub /organizacje autorytet dla aplikacji wielodostępnych.Napraw: przełącz się na autorytet /common lub /organizations |
| AADSTS90099 | Aplikacja nie została autoryzowana w tym miejscu docelowym (wymagana zgoda) | Aplikacja istnieje, ale nie została zaakceptowana w dzierżawie użytkownika. Różni się od AADSTS65001 tym, że cała aplikacja jest zablokowana, a nie tylko określone zakresy. Rozwiązanie: Wyślij adres URL zgody administratora do administratora IT klienta. Poprawka: adres URL zgody administratora do administratora dzierżawy klienta |
| AADSTS70011 | Udzielony grant jest nieprawidłowy lub wygasł | Token odświeżania lub kod autoryzacji wygasł lub został unieważniony. Kody autoryzacji wygasają po 10 minutach. Tokeny odświeżania wygasają po 90 dniach nieaktywności lub unieważnieniu przez administratora. Naprawa: Poproś użytkownika o ponowne uwierzytelnienie od początku procesu OAuth. Poprawka: pełne ponowne uwierzytelnienie |
| AADSTS50076 | Wieloskładnikowe uwierzytelnianie jest wymagane przez zasady dostępu warunkowego | Wynajmujący użytkownika wymaga uwierzytelniania wieloskładnikowego dla Twojej aplikacji. Jest to decyzja po stronie klienta egzekwowana przez administratora wynajmującego. Twoja aplikacja nie może tego ominąć. Użytkownik musi ukończyć MFA. W przypadku używania przepływu kodu uwierzytelniającego, Microsoft automatycznie wyświetli monit MFA w przeglądarce. Problemy pojawiają się w zautomatyzowanych przepływach (poświadczenia klienta), które nie mogą ukończyć MFA. Oczekiwane: użytkownik musi ukończyć MFA |
| AADSTS50020 | Konto użytkownika z zewnętrznego dostawcy tożsamości nie istnieje w dzierżawie | Użytkownik próbuje uwierzytelnić się za pomocą osobistego konta Microsoft w dzierżawie, która zezwala tylko na konta organizacyjne, lub odwrotnie. Napraw: Sprawdź punkt końcowy autoryzacji – jeśli używasz /organizacje, konta osobiste nie mogą uwierzytelnić się. Przełącz się na /wspólny jeśli potrzebujesz obu.Poprawka: przełącz autorytet na /common |
| AADSTS53003 | Dostęp zablokowany przez zasadę dostępu warunkowego | Polityka dostępu warunkowego firmy zablokowała tę próbę uwierzytelnienia całkowicie (np. zablokowany kraj, niezarządzane urządzenie, zablokowana aplikacja). Jest to decyzja po stronie klienta. Nie można jej pominąć. Wyświetl błąd użytkownikowi i doradź mu skontaktowanie się z administratorem IT. Klient: proszę skontaktować się z administratorem IT |
Pomiń 5 tygodni prac związanych z OAuth z Unipile
Wszystko w tym przewodniku – rejestracja aplikacji Entra, punkty końcowe autoryzacji, wybór zakresu, PKCE, rotacja tokenów, obsługa błędów AADSTS – to czas inżynieryjny, który nie przyspiesza rozwoju Twojego produktu. Unipile obsługuje cały stos Microsoft Graph OAuth jako usługę zarządzaną, dzięki czemu Twój zespół pisze jedno wywołanie API zamiast 500 linii kodu związanego z OAuth.
import żądania
UNIPILE_API_URL = "https://apiXXX.unipile.com:XXX"
UNIPILE_API_KEY = "your-api-key"
# Krok 1: Wygeneruj link do uwierzytelniania w chmurze dla Microsoftu
response = requests.stanowisko(
f"{UNIPILE_API_URL}/api/v1/hosted/accounts/link",
nagłówki={
"X-API-KEY": UNIPILE_API_KEY,
"Content-Type": "application/json"
},
json={
"typ": "create",
"dostawcy": ["MICROSOFT"],
"api_url": URL_UNIPILE_API,
"ważne do": "2026-12-31T23:59:59Z",
# Opcjonalnie: przypisz ten link do konkretnego użytkownika
"name": "id_uzytkownika_123",
# Opcjonalnie: otrzymuj powiadomienia o połączeniu konta
"adres_powiadomienia": "https://app.yourproduct.com/webhooks/account-linked"
}
)
# Krok 2: Przekieruj użytkownika na ten adres URL
hosted_auth_url = odzew.json()["url"]
Przykład #: https://account.unipile.com/[encoded-token]
# Unipile obsługuje: przekierowanie Entra, ekran zgody, PKCE,
Wymiana tokenów #, odświeżanie pamięci tokenów, zarządzanie zakresem
# Krok 3: Po uwierzytelnieniu skorzystaj z interfejsu API poczty elektronicznej Unipile, aby odczytywać/wysyłać wiadomości
emails = wnioski.uzyskać(
f"{UNIPILE_API_URL}/api/v1/emails",
nagłówki={"X-API-KEY": {UNIPILE_API_KEY},
parametry={"account_id": "identyfikator-powiązanego-konta"}
)Często zadawane pytania
Najczęstsze pytania dotyczące OAuth w Microsoft Graph w zakresie integracji poczty e-mail, od wyboru zakresów, przez cykl życia tokenów, po przepływy zgody przedsiębiorstwa.
/wspólny endpointu autoryzacji, pojedyncza rejestracja aplikacji Microsoft Entra obsługuje uwierzytelnianie zarówno dla osobistych kont Outlook.com, jak i dla kont służbowych/szkolnych Microsoft 365. Kluczowe jest wybranie opcji "Konta w dowolnym katalogu organizacji oraz osobiste konta Microsoft" podczas rejestrowania aplikacji w portalu Azure.nieprawidłowe_poświadczenie Błąd. Obsłuż to w sposób płynny: oznacz powiązane konto jako wymagające ponownego uwierzytelnienia i wyświetl wyraźny monit o ponowne uwierzytelnienie w swoim produkcie. Jest to oczekiwane zachowanie – decyzja po stronie klienta, niezależna od Ciebie.Mail.Read, Mail.ReadWriteoraz Mail.Send zakresy zgody użytkownika - poszczególni użytkownicy mogą je zatwierdzać podczas przepływu OAuth. Zgoda administratora jest wymagana tylko dla uprawnień aplikacji lub zakresów o wysokich uprawnieniach, takich jak Użytkownik.Odczyt.Wszystkie. Niektórzy administratorzy dzierżawców firmowych konfigurują zasady blokujące zgodę na wszystkie aplikacje innych firm – jest to decyzja po stronie klienta.nieprawidłowe_poświadczenie błędy i zastąp stare tokeny odświeżające nowym zwróconym w każdej odpowiedzi tokenu.zgoda do twojego adresu URL autoryzacji, aby wymusić ponowne wyświetlenie ekranu zgody. AADSTS90099: Cała aplikacja nie została autoryzowana w tym tenancie – administrator tenanta musi wstępnie zatwierdzić Twoją aplikację. Wyślij adres URL zgody administratora do administratora IT klienta. Oba błędy są częste w scenariuszach korporacyjnych, w których tenanci ograniczają zgodę użytkownika.Mail.ReadWrite oraz Mail.Send w tym samym zakresie. Ciąg znaków. Zauważ, że Mail.ReadWrite oraz Mail.Send to osobne zakresy - posiadanie uprawnienia do odczytu/zapisu nie przyznaje automatycznie uprawnienia do wysyłania. Zawsze uwzględniaj dostęp offline aby upewnić się, że otrzymasz token odświeżający. Zobacz strona API poczty elektronicznej szczegółów implementacyjnych.