Sdílet prostřednictvím


Kurz: Podpora náhradního webu

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

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 mobilní 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 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 .

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

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

Při volání signUp(username: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í:

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í.