Partilhar via


Tutorial: Suporte para fallback na web

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

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

  • Verifique o erro de Navegador Necessário.
  • Tratar o erro de navegador necessário.

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.

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 erro BrowserRequired será retornado. Por exemplo, suponha que inicializemos a instância do SDK especificando apenas o tipo de desafio OOB, mas no centro de administração Microsoft Entra, a aplicação está configurada com um Email com senha e um fluxo de utilizador. Quando chamamos o método signUp(username) da instância do SDK, obtemos um erro BrowserRequired, porque o Microsoft Entra requer um tipo de desafio (senha, neste caso) diferente do configurado no SDK.

Um 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 seja configurado com um fluxo de utilizador 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
    }
}

Quando chamamos o método signUp(parameters:delegate) da instância do SDK, obtemos um erro BrowserRequired, 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() 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.