Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Dzierżawcy usługi Workforce
Najemcy zewnętrzni (dowiedzieć się więcej)
W tym samouczku pokazano, jak uzyskać token w przeglądarce, w której uwierzytelnianie natywne nie jest wystarczające do zakończenia procesu użytkownika.
W tym samouczku nauczysz się następujących rzeczy:
- Sprawdź błąd BrowserRequired.
- Obsłuż błąd BrowserRequired.
Warunki 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 acquireToken() zestawu SDK 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.
Kiedy przez firmę Microsoft Entra wymagane są możliwości, których klient nie może dostarczyć, błąd BrowserRequired zostanie zwrócony. Załóżmy na przykład, że inicjujemy instancję SDK, określając jedynie typ wyzwania OOB, ale w centrum administracyjnym Microsoft Entra aplikacja jest skonfigurowana przy użyciu przepływu użytkownika e-mail z hasłem. Podczas wywoływania metody signUp(username) z wystąpienia zestawu SDK występuje BrowserRequired błąd, ponieważ Microsoft Entra wymaga innego typu wyzwania (hasło w tym przypadku) niż ten skonfigurowany w zestawie SDK.
Niewystarczający typ wyzwania to tylko jeden przykład, 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 wyzwania OOB. Załóżmy, że w centrum administracyjnym Microsoft Entra aplikacja jest skonfigurowana z użyciem przepływu użytkownika e-mail z hasłem.
let parameters = MSALNativeAuthSignUpParameters(username: email)
nativeAuth.signUp(parameters: parameters, delegate: self)
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
// handle browser required error
}
}
Podczas wywoływania metody signUp(parameters:delegate) z wystąpienia zestawu SDK występuje błąd BrowserRequired, ponieważ Microsoft Entra wymaga innego typu wyzwania (hasło w tym przypadku) niż ten skonfigurowany w zestawie SDK.
Obsługiwanie 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 metodę acquireToken(). 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
- Skonfiguruj identyfikator URI przekierowania w centrum administracyjnym 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 zostałyby pobrane za pośrednictwem rodzimego procesu autoryzacji.