Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:
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
- Se estiver a utilizar o iOS, siga os passos indicados em Iniciar sessão de utilizadores numa aplicação móvel iOS nativa de exemplo.
- Se estiver a utilizar o macOS, siga os passos indicados em Inicie sessão para utilizadores na aplicação de exemplo macOS (Swift), utilizando aautenticação nativa.
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:
- Configurar esquemas de URL em nosso projeto Xcode
- Configurar URI de redirecionamento no Centro de Administração do Microsoft Entra
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.
Conteúdo relacionado
- Como executar o aplicativo de exemplo Android.
- Visão geral da referência da API de autenticação nativa