Compartilhar via


Tutorial: Suporte a fallback da Web

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

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

Neste tutorial, você aprenderá a:

  • Verificar o erro BrowserRequired.
  • Tratar o 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 acquireToken() do SDK para continuar o fluxo no navegador.

Ao inicializar o SDK, é necessário especificar quais tipos de desafio o aplicativo pode suportar. Aqui está a lista de tipos de desafios que o SDK aceita:

  • OOB (fora de banda): adicione esse tipo de desafio quando o aplicativo iOS/macOS puder lidar com uma senha de uso único, neste caso, um código de email.
  • Senha: adicione esse tipo de desafio quando o plicativo for capaz de lidar com a autenticação baseada em senha.

Quando o Microsoft Entra exige recursos que o cliente não pode fornecer, o erro BrowserRequired será retornado. Por exemplo, suponha que a instância do SDK será inicializada especificando somente o tipo de desafio OOB, mas no centro de administração do Microsoft Entra, o aplicativo é configurado com um fluxo de usuário de Email com senha. Ao chamar o método signUp(username) da instância do SDK, obtém-se o erro BrowserRequired, porque o Microsoft Entra requer um tipo de desafio diferente (senha, neste caso) daquele 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 de exemplos

No snippet de código a seguir, você pode ver como pode 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 somente o tipo de desafio OOB. Suponha que, no centro de administração do Microsoft Entra, o aplicativo esteja configurado com um fluxo de usuário de Email com senha.

let parameters = MSALNativeAuthSignUpParameters(username: email)
nativeAuth.signUp(parameters: parameters, delegate: self)

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

Ao chamar o método signUp(parameters:delegate) da instância do SDK, um erro BrowserRequired é obtido, porque o Microsoft Entra requer um tipo de desafio diferente (senha, neste caso) daquele configurado no SDK.

Tratar o erro BrowserRequired

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

Agora é possível obter um token e uma conta interativamente. Veja o seguinte exemplo de como fazer isso:

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