Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:
Externí tenanti (další informace)
Tento kurz ukazuje, jak získat token prostřednictvím prohlížeče, kde nativní ověřování nestačí k dokončení toku uživatele.
V tomto kurzu se naučíte:
- Zkontrolujte chybu typu "BrowserRequired".
- Řešení chyby BrowserRequired
Požadavky
- Pokud používáte iOS, postupujte podle pokynů v Přihlášení uživatelů v ukázkové nativní mobilní aplikaci pro iOS.
- Pokud používáte macOS, postupujte podle pokynů v Přihlášení uživatelů v ukázkové aplikaci macOS (Swift) pomocí nativního ověřování.
Vyžaduje se prohlížeč.
BrowserRequired je záložní mechanismus pro různé scénáře, kdy nativní ověřování nestačí k dokončení toku uživatele.
Pokud chcete zajistit stabilitu aplikace a vyhnout se přerušení toku ověřování, důrazně doporučujeme použít metodu acquireToken() sady SDK k pokračování toku v prohlížeči.
Když inicializujeme sadu SDK, musíme určit, které typy úkolů může naše aplikace podporovat. Tady je seznam typů výzvy, které sada SDK přijímá:
- OOB (mimo pásmo): Tento typ výzvy přidejte, když vaše aplikace pro iOS/macOS dokáže zpracovat jednorázové heslo, v tomto případě e-mailový kód.
- Heslo: Tento typ výzvy přidejte, když vaše aplikace dokáže zpracovat ověřování založené na heslech.
Když Microsoft Entra vyžaduje schopnosti, které klient nemůže poskytnout, bude vrácena chyba BrowserRequired. Předpokládejme například, že inicializujeme instanci sady SDK, která určuje pouze typ výzvy OOB, ale v Centru pro správu Microsoft Entra je aplikace nakonfigurována s tokem uživatele e-mailem s heslem. Při volání metody signUp(username) z instance sady SDK se zobrazí chyba BrowserRequired, protože Microsoft Entra vyžaduje jiný typ výzvy (v tomto případě heslo) než ten nakonfigurovaný v sadě SDK.
Nedostatečný typ výzvy je pouze jedním z příkladů, kdy může dojít k BrowserRequired.
BrowserRequired je obecný záložní mechanismus, ke kterému může dojít v různých scénářích.
Ukázkový tok
V následujícím fragmentu kódu zjistíte, jak můžete během inicializace instance sady SDK určit typy výzvy:
nativeAuth = try MSALNativeAuthPublicClientApplication(
clientId: "<client id>",
tenantSubdomain: "<tenant subdomain>",
challengeTypes: [.OOB]
)
V tomto případě zadáváme pouze typ výzvy OOB. Předpokládejme, že v Centru pro správu Microsoft Entra je aplikace nakonfigurovaná v rámci uživatelského toku "Email s heslem".
let parameters = MSALNativeAuthSignUpParameters(username: email)
nativeAuth.signUp(parameters: parameters, delegate: self)
func onSignUpStartError(error: MSAL.SignUpStartError) {
if error.isBrowserRequired {
// handle browser required error
}
}
Při volání metody signUp(parameters:delegate) z instance sady SDK se zobrazí chyba BrowserRequired, protože Microsoft Entra vyžaduje jiný typ výzvy (v tomto případě heslo) než ten nakonfigurovaný v sadě SDK.
Řešení chyby BrowserRequired
Abychom tento druh chyby zvládli, musíme spustit prohlížeč a nechat uživatele, aby tam provedl tok ověřování. To lze provést voláním metody acquireToken(). Aby bylo možné tuto metodu použít, je potřeba provést několik dalších konfigurací:
- Nakonfigurujte schémata adres URL v našem projektu Xcode
- Konfigurace přesměrovací URI v administračním centru Microsoft Entra
Teď můžeme získat token a účet interaktivně. Tady je příklad postupu:
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
}
}
}
Vrácené tokeny a účet jsou identické s tokeny, které by byly načítané prostřednictvím nativního autentizačního toku.