Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
É obrigatório o uso de um navegador da Web na autenticação interativa. No iOS e no macOS 10.15+, o Biblioteca do Microsoft Authenticator (MSAL) usa o navegador da Web do sistema por padrão (que pode aparecer na parte superior do seu aplicativo) para fazer autenticação interativa para conectar usuários. O uso do navegador do sistema tem a vantagem de compartilhar o estado de SSO (logon único) com outros aplicativos e com aplicativos Web.
Você pode alterar a experiência personalizando a configuração para outras opções para exibir conteúdo da Web, como:
Somente para iOS:
Para iOS e macOS:
A MSAL para macOS só dá suporte a versões mais antigas WKWebView do sistema operacional.
ASWebAuthenticationSession só há suporte no macOS 10.15 e superior.
Navegadores do sistema
Para iOS, ASWebAuthenticationSessione SFAuthenticationSessionSFSafariViewController são considerados navegadores do sistema. Para macOS, só ASWebAuthenticationSession está disponível. Em geral, os navegadores do sistema compartilham cookies e outros dados do site com o aplicativo do navegador Safari.
Por padrão, a MSAL detectará dinamicamente a versão do iOS e selecionará o navegador do sistema recomendado disponível nessa versão. No iOS 12 ou superior, será ASWebAuthenticationSession.
Configuração padrão para iOS
| Versão | navegador da Web |
|---|---|
| iOS 12+ | ASWebAuthenticationSession |
| iOS 11 | SFAuthenticationSession |
| iOS 10 | SFSafariViewController |
Configuração padrão para macOS
| Versão | navegador da Web |
|---|---|
| macOS 10.15+ | ASWebAuthenticationSession |
| outras versões | WKWebView |
Os desenvolvedores também podem selecionar um navegador do sistema diferente para aplicativos MSAL:
-
SFAuthenticationSessioné a versão do iOS 11 deASWebAuthenticationSession. -
SFSafariViewControlleré uma finalidade mais geral e fornece uma interface para navegar na Web e também pode ser usada para fins de logon. No iOS 9 e 10, cookies e outros dados do site são compartilhados com o Safari, mas não no iOS 11 e posterior.
Navegador no aplicativo
WKWebView é um navegador no aplicativo que exibe conteúdo da Web. Ele não compartilha cookies ou dados do site com outras instâncias do WKWebView ou com o navegador Safari. WKWebView é um navegador multiplataforma que está disponível para iOS e macOS.
Compartilhamento de cookie e implicações de SSO
O navegador usado afeta a experiência de SSO devido à forma como eles compartilham cookies. As tabelas a seguir resumem as experiências de SSO por navegador.
| Tecnologia | Tipo de navegador | Disponibilidade do iOS | Disponibilidade do macOS | Compartilha cookies e outros dados | Disponibilidade da MSAL | SSO |
|---|---|---|---|---|---|---|
| ASWebAuthenticationSession | System | iOS12 e para cima | macOS 10.15 e para cima | Yes | iOS e macOS 10.15+ | w/ Instâncias do Safari |
| SFAuthenticationSession | System | iOS11 e para cima | N/A | Yes | Apenas iOS | w/ Instâncias do Safari |
| SFSafariViewController | System | iOS11 e para cima | N/A | No | Apenas para iOS | Não** |
| SFSafariViewController | System | iOS10 | N/A | Yes | Apenas para iOS | w/ Instâncias do Safari |
| WKWebView | No aplicativo | iOS8 e para cima | macOS 10.10 e para cima | No | iOS e macOS | Não** |
** Para que o SSO funcione, os tokens precisam ser compartilhados entre aplicativos. Isso requer um cache de token ou um aplicativo de agente, como Microsoft Authenticator para iOS.
Alterar o navegador padrão para a solicitação
Você pode usar um navegador no aplicativo ou um navegador do sistema específico, dependendo dos requisitos de UX, alterando a seguinte propriedade em MSALWebviewParameters:
@property (nonatomic) MSALWebviewType webviewType;
Alteração por solicitação interativa
Cada solicitação pode ser configurada para substituir o navegador padrão alterando a propriedade MSALInteractiveTokenParameters.webviewParameters.webviewType antes de passá-la à API acquireTokenWithParameters:completionBlock:.
Além disso, o MSAL permite passar um WKWebView personalizado definindo a propriedade MSALInteractiveTokenParameters.webviewParameters.customWebView.
Por exemplo:
Objective-C
UIViewController *myParentController = ...;
WKWebView *myCustomWebView = ...;
MSALWebviewParameters *webViewParameters = [[MSALWebviewParameters alloc] initWithAuthPresentationViewController:myParentController];
webViewParameters.webviewType = MSALWebviewTypeWKWebView;
webViewParameters.customWebview = myCustomWebView;
MSALInteractiveTokenParameters *interactiveParameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"myscope"] webviewParameters:webViewParameters];
[app acquireTokenWithParameters:interactiveParameters completionBlock:completionBlock];
Swift
let myParentController: UIViewController = ...
let myCustomWebView: WKWebView = ...
let webViewParameters = MSALWebviewParameters(authPresentationViewController: myParentController)
webViewParameters.webviewType = MSALWebviewType.wkWebView
webViewParameters.customWebview = myCustomWebView
let interactiveParameters = MSALInteractiveTokenParameters(scopes: ["myscope"], webviewParameters: webViewParameters)
app.acquireToken(with: interactiveParameters, completionBlock: completionBlock)
Se você usar uma visão da Web personalizada, as notificações serão usadas para indicar o status do conteúdo da Web que está sendo exibido, como:
/*! Fired at the start of a resource load in the webview. The URL of the load, if available, will be in the @"url" key in the userInfo dictionary */
extern NSString *MSALWebAuthDidStartLoadNotification;
/*! Fired when a resource finishes loading in the webview. */
extern NSString *MSALWebAuthDidFinishLoadNotification;
/*! Fired when web authentication fails due to reasons originating from the network. Look at the @"error" key in the userInfo dictionary for more details.*/
extern NSString *MSALWebAuthDidFailNotification;
/*! Fired when authentication finishes */
extern NSString *MSALWebAuthDidCompleteNotification;
/*! Fired before ADAL invokes the broker app */
extern NSString *MSALWebAuthWillSwitchToBrokerApp;
Opções
Todos os tipos de navegador da Web compatíveis com MSAL são declarados na enumeração MSALWebviewType
typedef NS_ENUM(NSInteger, MSALWebviewType)
{
/**
For iOS 11 and up, uses AuthenticationSession (ASWebAuthenticationSession or SFAuthenticationSession).
For older versions, with AuthenticationSession not being available, uses SafariViewController.
For macOS 10.15 and above uses ASWebAuthenticationSession
For older macOS versions uses WKWebView
*/
MSALWebviewTypeDefault,
/** Use ASWebAuthenticationSession where available.
On older iOS versions uses SFAuthenticationSession
Doesn't allow any other webview type, so if either of these are not present, fails the request*/
MSALWebviewTypeAuthenticationSession,
#if TARGET_OS_IPHONE
/** Use SFSafariViewController for all versions. */
MSALWebviewTypeSafariViewController,
#endif
/** Use WKWebView */
MSALWebviewTypeWKWebView,
};
Próximas Etapas
Saiba mais sobre fluxos de autenticação e cenários de aplicativo