Kurz: Podpora náhradního webu
Platí pro: iOS (Swift)
macOS (Swift)
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 BrowserRequired.
- Zpracování chyby BrowserRequired
Požadavky
- Pokud používáte iOS, postupujte podle pokynů v části Přihlášení uživatelů v ukázkové nativní mobilní aplikaci pro iOS.
- Pokud používáte macOS, postupujte podle pokynů v části 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 sady SDK acquireToken()
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.
Pokud Microsoft Entra vyžaduje funkce, které klient nemůže poskytnout BrowserRequired
, vrátí se chyba. Předpokládejme například, že inicializujeme instanci sady SDK určující pouze typ výzvy OOB, ale v Centru pro správu Microsoft Entra se aplikace nakonfiguruje s tokem uživatele e-mailu s heslem . Při volání metody signUp(username) z instance sady SDK se zobrazí BrowserRequired
chyba, 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 BrowserRequired
může dojít.
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á pomocí e-mailu s tokem uživatele 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í signUp(parameters:delegate)
metody z instance sady SDK se zobrazí BrowserRequired
chyba, protože Microsoft Entra vyžaduje jiný typ výzvy (v tomto případě heslo) než ten nakonfigurovaný v sadě SDK.
Zpracování 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 acquireToken()
metody. Aby bylo možné tuto metodu použít, je potřeba provést několik dalších konfigurací:
- Konfigurace schémat adres URL v našem projektu Xcode
- Konfigurace identifikátoru URI přesměrování v Centru pro správu 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 se načetly prostřednictvím nativního toku ověřování.