Tutorial: Suporte a fallback da Web
Aplica-se a: iOS (Swift)
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
- Se você estiver usando o iOS, siga as etapas em Conectar usuários em um aplicativo móvel iOS nativo de exemplo.
- Se você estiver usando o macOS, siga as etapas em Conectar usuários no aplicativo macOS (Swift) de exemplo usando a autenticaçã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.
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:
- Configurar esquemas de URL no projeto do Xcode
- Configurar o URI de direcionamento no centro de administração do Microsoft Entra
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.