Partilhar via


Tutorial: Suporte web fallback

Aplica-se a: Círculo verde com um símbolo de marca de verificação branco. iOS (Swift) Círculo verde com um símbolo de marca de verificação branco. macOS (Swift)

Este tutorial demonstra como adquirir um token por meio de um navegador onde a autenticação nativa não é suficiente para concluir o fluxo do usuário.

Neste tutorial, irá aprender a:

  • Verifique o erro BrowserRequired.
  • Manipular erro BrowserRequired.

Pré-requisitos

Navegador necessário

BrowserRequired é um mecanismo de fallback para vários cenários em que a autenticação nativa não é suficiente para concluir o fluxo do usuário.

Para garantir a estabilidade do seu aplicativo e evitar a interrupção do fluxo de autenticação, é altamente recomendável usar o método do SDK acquireToken() para continuar o fluxo no navegador.

Quando inicializamos o SDK, precisamos especificar quais tipos de desafio nosso aplicativo pode suportar. Aqui está a lista de tipos de desafio que o SDK aceita:

  • OOB (fora de banda): adicione este tipo de desafio quando seu aplicativo iOS/macOS puder lidar com uma senha única, neste caso um código de e-mail.
  • Senha: adicione este tipo de desafio quando seu aplicativo for capaz de lidar com a autenticação baseada em senha.

Quando o Microsoft Entra requer recursos que o cliente não pode fornecer, o BrowserRequired erro será retornado. Por exemplo, suponha que inicializamos a instância do SDK especificando apenas o tipo de desafio OOB, mas no centro de administração do Microsoft Entra, o aplicativo é configurado com um fluxo de usuário Email com senha . Quando chamamos o método signUp(username) da instância do SDK, recebemos um BrowserRequired erro, porque o Microsoft Entra requer um tipo de desafio (senha, neste caso) diferente do configurado no SDK.

O tipo de desafio insuficiente é apenas um exemplo de quando BrowserRequired pode ocorrer. BrowserRequired é um mecanismo de fallback geral que pode acontecer em vários cenários.

Fluxo da amostra

No trecho de código a seguir, você pode ver como especificar os tipos de desafio durante a inicialização da instância do SDK:

nativeAuth = try MSALNativeAuthPublicClientApplication(
    clientId: "<client id>",
    tenantSubdomain: "<tenant subdomain>",
    challengeTypes: [.OOB]
)

Neste caso, estamos especificando apenas o tipo de desafio OOB. Suponha que no centro de administração do Microsoft Entra, o aplicativo é configurado com um fluxo de usuário de e-mail com senha .

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

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

Quando chamamos o signUp(username:delegate) método da instância do SDK, recebemos um BrowserRequired erro, porque o Microsoft Entra requer um tipo de desafio diferente (senha, neste caso) do que o configurado no SDK.

Manipular BrowserErro obrigatório

Para lidar com esse tipo de erro, precisamos iniciar um navegador e deixar o usuário executar o fluxo de autenticação lá. Isso pode ser feito chamando acquireToken() o método. Para usar esse método, algumas configurações adicionais precisam ser feitas:

Agora podemos obter um token e uma conta interativamente. Aqui está um exemplo de como fazê-lo:

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
        }
    }
}

Os tokens e a conta que são retornados são idênticos aos que seriam recuperados por meio de um fluxo de autenticação nativo.