Samouczek: obsługa rezerwowego internetowego
Dotyczy: iOS (Swift) macOS (Swift)
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
- Jeśli używasz systemu iOS, wykonaj kroki opisane w artykule Logowanie użytkowników w przykładowej natywnej aplikacji mobilnej dla systemu iOS.
- Jeśli używasz systemu macOS, wykonaj kroki opisane w artykule Logowanie użytkowników w przykładowej aplikacji systemu macOS (Swift) przy użyciu uwierzytelniania natywnego.
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:
- Konfigurowanie schematów adresów URL w naszym projekcie Xcode
- Konfigurowanie identyfikatora URI przekierowania w centrum administracyjnym firmy Microsoft Entra
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.