Udostępnij za pośrednictwem


Samouczek: obsługa rezerwowego internetowego

Dotyczy: Zielony okrąg z białym symbolem znacznika wyboru. iOS (Swift) macOS (Swift) Zielony okrąg z białym symbolem znacznika wyboru.

W tym samouczku pokazano, jak uzyskać token za pośrednictwem przeglądarki, w której uwierzytelnianie natywne nie jest wystarczające do ukończenia przepływu użytkownika.

Z tego samouczka dowiesz się, jak wykonywać następujące czynności:

  • Sprawdź błąd BrowserRequired.
  • Obsługa błędu BrowserRequired.

Wymagania wstępne

Wymagana przeglądarka

BrowserRequired to mechanizm rezerwowy dla różnych scenariuszy, w których uwierzytelnianie natywne nie jest wystarczające do ukończenia przepływu użytkownika.

Aby zapewnić stabilność aplikacji i uniknąć przerw w przepływie uwierzytelniania, zdecydowanie zaleca się użycie metody zestawu SDK acquireToken() w celu kontynuowania przepływu w przeglądarce.

Podczas inicjowania zestawu SDK musimy określić typy wyzwań, które mogą obsługiwać nasza aplikacja. Oto lista typów wyzwań akceptowanych przez zestaw SDK:

  • OOB (poza pasmem): dodaj ten typ wyzwania, gdy aplikacja systemu iOS/macOS może obsługiwać kod dostępu jednorazowego, w tym przypadku kod e-mail.
  • Hasło: dodaj ten typ wyzwania, gdy aplikacja może obsługiwać uwierzytelnianie oparte na hasłach.

Gdy firma Microsoft Entra wymaga możliwości, których klient nie może podać BrowserRequired , zostanie zwrócony błąd. Załóżmy na przykład, że inicjujemy wystąpienie zestawu SDK określające tylko typ zadania OOB, ale w centrum administracyjnym firmy Microsoft Entra aplikacja jest skonfigurowana przy użyciu przepływu użytkownika poczty e-mail z hasłem . Podczas wywoływania metody signUp(username) z wystąpienia zestawu SDK występuje BrowserRequired błąd, ponieważ firma Microsoft Entra wymaga innego typu wyzwania (hasło w tym przypadku) niż ta skonfigurowana w zestawie SDK.

Niewystarczający typ wyzwania to tylko jeden przykład tego, kiedy BrowserRequired może wystąpić. BrowserRequired to ogólny mechanizm rezerwowy, który może wystąpić w różnych scenariuszach.

Przykładowy przepływ

W poniższym fragmencie kodu można zobaczyć, jak można określić typy wyzwań podczas inicjowania wystąpienia zestawu SDK:

nativeAuth = try MSALNativeAuthPublicClientApplication(
    clientId: "<client id>",
    tenantSubdomain: "<tenant subdomain>",
    challengeTypes: [.OOB]
)

W tym przypadku określamy tylko typ zadania OOB. Załóżmy, że w centrum administracyjnym firmy Microsoft Entra aplikacja jest skonfigurowana przy użyciu poczty e-mail z przepływem użytkownika hasła .

nativeAuth.signUp(username: email, delegate: self)

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        // handle browser required error
    }
}

Podczas wywoływania signUp(username:delegate) metody z wystąpienia zestawu SDK występuje BrowserRequired błąd, ponieważ firma Microsoft Entra wymaga innego typu wyzwania (hasła w tym przypadku) niż ta skonfigurowana w zestawie SDK.

Obsługa błędu BrowserRequired

Aby obsłużyć ten rodzaj błędu, musimy uruchomić przeglądarkę i pozwolić użytkownikowi wykonać przepływ uwierzytelniania. Można to zrobić, wywołując acquireToken() metodę . Aby można było użyć tej metody, należy wykonać kilka dodatkowych konfiguracji:

Teraz możemy pobrać token i konto interaktywnie. Oto przykład tego, jak to zrobić:

func onSignUpStartError(error: MSAL.SignUpStartError) {
    if error.isBrowserRequired {
        let webviewParams = MSALWebviewParameters(authPresentationViewController: self)
        let parameters = MSALInteractiveTokenParameters(scopes: ["User.Read"], webviewParameters: webviewParams)

        nativeAuth.acquireToken(with: parameters) { (result: MSALResult?, error: Error?) in
            // result will contain account and tokens retrieved in the browser
        }
    }
}

Zwrócone tokeny i konto są identyczne z tymi, które zostaną pobrane za pośrednictwem natywnego przepływu uwierzytelniania.