Udostępnij za pośrednictwem


Znane problemy w przeglądarkach Internet Explorer i Microsoft Edge (MSAL.js)

Problemy ze względu na strefy zabezpieczeń

Mieliśmy wiele raportów o problemach z uwierzytelnianiem, czyli w przeglądarce Microsoft Edge (od czasu aktualizacji przeglądarki Microsoft Edge do wersji 40.15063.0.0). Śledzimy je i poinformowaliśmy zespół przeglądarki Microsoft Edge. Chociaż przeglądarka Microsoft Edge pracuje nad rozwiązaniem, poniżej przedstawiono opis najczęściej występujących problemów oraz możliwych obejść do zaimplementowania.

Przyczyna

Przyczyną większości tych problemów jest następująca. Pamięć sesji i pamięć lokalna są podzielone według stref zabezpieczeń w przeglądarce Microsoft Edge. W tej konkretnej wersji przeglądarki Microsoft Edge, gdy aplikacja jest przekierowywana między strefami, magazyn sesji i magazyn lokalny są czyszczone. W szczególności pamięć sesji jest czyszczona podczas zwykłej pracy przeglądarki, a zarówno pamięć sesji, jak i pamięć lokalna są czyszczone w trybie InPrivate przeglądarki. MSAL.js zapisuje określony stan w magazynie sesji i polega na sprawdzeniu tego stanu podczas przepływów uwierzytelniania. Po wyczyszczeniu pamięci masowej sesji ten stan zostaje utracony, co powoduje zakłócenia w działaniu.

Problemy

  • Nieskończone pętle przekierowania i ponowne ładowanie stron podczas uwierzytelniania. Gdy użytkownicy logują się do aplikacji w przeglądarce Microsoft Edge, są przekierowywani z powrotem ze strony logowania microsoft Entra i są zablokowani w nieskończonej pętli przekierowania, co powoduje ponowne załadowanie strony. Zwykle towarzyszy mu błąd w invalid_state magazynie sesji.

  • Nieskończone pętle pozyskiwania tokenów i błąd AADSTS50058. Gdy aplikacja uruchamiana w przeglądarce Microsoft Edge próbuje uzyskać token dostępu do zasobu, może utknąć w nieskończonej pętli wywołań żądania tokenu. Następujący błąd jest zwracany przez Microsoft Entra ID w śledzeniu sieciowym:

    Error :login_required; Error description:AADSTS50058: A silent sign-in request was sent but no user is signed in. The cookies used to represent the user's session were not sent in the request to Azure AD. This can happen if the user is using Internet Explorer or Edge, and the web app sending the silent sign-in request is in different IE security zone than the Azure AD endpoint (login.microsoftonline.com)

  • Okno popup nie zamyka się lub jest zablokowane podczas logowania w celu uwierzytelnienia. Podczas uwierzytelniania w oknie wyskakującym w przeglądarce Microsoft Edge lub Internet Explorer (InPrivate), po wprowadzeniu poświadczeń i zalogowaniu się, jeśli różne domeny w różnych strefach bezpieczeństwa uczestniczą w nawigacji, wyskakujące okienko nie zamknie się, ponieważ MSAL.js utraci połączenie z oknem.

  • Nie można zalogować się, ponieważ adres URL przekierowania ma przedrostek tauri. Jedynymi obsługiwanymi schematami dla identyfikatorów URI przekierowania są https: dla aplikacji produkcyjnych i http://localhost dla lokalnego rozwoju. Jeśli spróbujesz użyć innego schematu, takiego jak tauri://localhost, dla aplikacji mobilnej lub klasycznej, zostanie wyświetlony poniższy komunikat o błędzie. Ten błąd pojawia się w wyniku projektowania zaplecza SPA.

    AADSTS90023: Cross-origin token redemption is permitted only for the 'Single-Page Application' client-type or 'Native' client-type with origin registered in AllowedOriginForNativeAppCorsRequestInOAuthToken allow list.

Aktualizacja: poprawka dostępna w MSAL.js 0.2.3

Poprawki problemów z pętlą przekierowania uwierzytelniania zostały wydane w MSAL.js 0.2.3. Włącz flagę storeAuthStateInCookie w konfiguracji MSAL.js, aby skorzystać z tej poprawki. Domyślnie ta flaga ma wartość false.

Po włączeniu storeAuthStateInCookie flagi MSAL.js używa plików cookie przeglądarki do przechowywania stanu żądania wymaganego do weryfikacji przepływów uwierzytelniania.

Uwaga

Ta poprawka nie jest jeszcze dostępna dla opakowań msal-angular i msal-angularjs. Ta poprawka nie rozwiązuje problemu z oknami podręcznymi.

Inne obejścia

Przed wdrożeniem tych obejść upewnij się, że problem występuje tylko w określonej wersji przeglądarki Microsoft Edge i działa w innych przeglądarkach.

  1. W pierwszym kroku, aby obejść te problemy, upewnij się, że domena aplikacji i wszystkie inne witryny zaangażowane w przekierowania przepływu uwierzytelniania są dodawane jako zaufane witryny w ustawieniach zabezpieczeń przeglądarki. Gwarantuje to, że przekierowania należą do tej samej strefy zabezpieczeń. W tym celu wykonaj następujące kroki:

    • Otwórz program Internet Explorer i kliknij ustawienia (ikona koła zębatego) w prawym górnym rogu
    • Wybieranie opcji internetowych
    • Wybierz kartę Zabezpieczenia
    • W obszarze opcji Zaufane witryny kliknij przycisk witryny i dodaj adresy URL w wyświetlonym oknie dialogowym.
  2. Jak wspomniano wcześniej, ponieważ podczas regularnej nawigacji wyczyszczona jest tylko pamięć sesji, można skonfigurować MSAL.js do korzystania z pamięci lokalnej. Można to ustawić jako cacheLocation parametr konfiguracji podczas inicjowania biblioteki MSAL.

Należy pamiętać, że te obejścia nie rozwiążą problemu z przeglądaniem InPrivate, ponieważ zarówno sesja, jak i magazyn lokalny są usuwane.

Problemy związane z blokowaniem wyskakujących okienek

Istnieją przypadki, w których wyskakujące okienka są blokowane, takie jak w przeglądarce Microsoft Edge, na przykład gdy podczas wieloskładnikowego uwierzytelniania występuje drugi popup. Otrzymasz alert w przeglądarce, który pozwoli ci zaakceptować okno podręczne jednorazowo lub na stałe. Jeśli zdecydujesz się zezwolić, przeglądarka automatycznie otworzy okno podręczne i zwróci null do niego uchwyt. W związku z tym biblioteka nie ma uchwytu dla okna i nie ma możliwości zamknięcia okna podręcznego. Ten sam problem nie pojawia się w przeglądarce Chrome, gdy prosi o zezwolenie na okna wyskakujące, ponieważ nie otwiera ich automatycznie.

Jako obejście, deweloperzy muszą zezwolić na wyskakujące okienka w przeglądarce Microsoft Edge, zanim zaczną korzystać ze swojej aplikacji, aby uniknąć tego problemu.

Następne kroki

Dowiedz się więcej o korzystaniu z MSAL.js w programie Internet Explorer.