Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um navegador da Web é necessário para autenticação interativa. No iOS e macOS 10.15+, a Biblioteca de Autenticação da Microsoft (MSAL) utiliza o navegador web do sistema por defeito (que pode aparecer no topo da sua aplicação) para realizar autenticação interativa para os utilizadores que iniciam sessão. A utilização do navegador do sistema tem a vantagem de partilhar o estado de single logon (SSO) com outras aplicações e com aplicações web.
Pode alterar a experiência personalizando a configuração para outras opções de exibição de conteúdos web, tais como:
Apenas para iOS:
Para iOS e macOS:
O MSAL para macOS só suporta WKWebView em versões mais antigas do sistema operativo.
ASWebAuthenticationSession é suportado apenas no macOS 10.15 e versões superiores.
Navegadores do sistema
Para iOS, ASWebAuthenticationSession, SFAuthenticationSession, e SFSafariViewController são considerados navegadores de sistema. Para macOS, apenas ASWebAuthenticationSession está disponível. Em geral, os navegadores do sistema partilham cookies e outros dados do site com a aplicação do navegador Safari.
Por defeito, o MSAL deteta dinamicamente a versão do iOS e seleciona o navegador de sistema recomendado disponível nessa versão. No iOS 12 ou superior, será ASWebAuthenticationSession.
Configuração padrão para iOS
| Versão | browser |
|---|---|
| iOS 12+ | ASWebAuthenticationSession |
| iOS 11 | SFAuthenticationSession |
| iOS 10 | SFSafariViewController |
Configuração padrão para macOS
| Versão | browser |
|---|---|
| macOS 10.15+ | ASWebAuthenticationSession |
| Outras versões | WKWebView |
Os programadores também podem escolher um navegador de sistema diferente para aplicações MSAL:
-
SFAuthenticationSessioné a versão iOS 11 deASWebAuthenticationSession. -
SFSafariViewControlleré de uso mais geral e fornece uma interface para navegar na web, podendo também ser usado para fins de login. No iOS 9 e 10, cookies e outros dados do site são partilhados com o Safari — mas não no iOS 11 e posteriores.
Navegador dentro da aplicação
O WKWebView é um navegador dentro da aplicação que apresenta conteúdos web. Não partilha cookies nem dados do site com outras instâncias do WKWebView , nem com o navegador Safari. O WKWebView é um navegador multiplataforma disponível tanto para iOS como para macOS.
Partilha de cookies e implicações no SSO
O navegador que usa afeta a experiência SSO devido à forma como partilham cookies. As tabelas seguintes resumem as experiências SSO por navegador.
| Tecnologia | Tipo de Navegador | Disponibilidade no iOS | Disponibilidade no macOS | Partilha cookies e outros dados | Disponibilidade do MSAL | SSO |
|---|---|---|---|---|---|---|
| ASWebAuthenticationSession | System | iOS12 e superiores | macOS 10.15 e superiores | Yes | iOS e macOS 10.15+ | com instâncias do Safari |
| SFAuthenticationSession | System | iOS11 e superiores | N/A | Yes | Apenas iOS | com instâncias do Safari |
| SFSafariViewController | System | iOS11 e superiores | N/A | No | Apenas iOS | Não** |
| SFSafariViewController | System | iOS10 | N/A | Yes | Apenas iOS | com instâncias do Safari |
| WKWebView | Na aplicação | iOS8 e superiores | macOS 10.10 e superiores | No | iOS e macOS | Não** |
** Para que o SSO funcione, os tokens precisam de ser partilhados entre aplicações. Isto requer uma cache de tokens, ou uma aplicação intermediária, como o Microsoft Authenticator para iOS.
Alterar o navegador predefinido para o pedido
Pode usar um navegador dentro da aplicação, ou um navegador de sistema específico dependendo dos seus requisitos de UX, alterando a seguinte propriedade em MSALWebviewParameters:
@property (nonatomic) MSALWebviewType webviewType;
Alteração por pedido interativo
Cada pedido pode ser configurado para substituir o navegador predefinido, alterando a propriedade MSALInteractiveTokenParameters.webviewParameters.webviewType antes de o passar à 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 usar uma webview personalizada, as notificações são usadas para indicar o estado do conteúdo web que está a ser exibido, tais 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 navegadores web suportados por MSAL são declarados no enum 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,
};
Passos seguintes
Saiba mais sobre fluxos de autenticação e cenários de aplicação