Compartilhar via


Tutorial: Suporte a fallback da web

Aplica-se a: Círculo verde com um símbolo de marca de seleção branca que indica que o conteúdo a seguir se aplica a locatários externos. Locatários externos (saiba mais)

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ê:

  • Verificar o erro BrowserRequired.
  • Identificar 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.

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