Modifique a sua aplicação iOS ou iPadOS para suportar o modo dispositivo partilhado

Neste tutorial, aprende como modificar uma aplicação iOS ou iPadOS para suportar o Modo de Dispositivo Partilhado (SDM). SDM é uma funcionalidade do Microsoft Entra ID que permite às organizações configurar um dispositivo iOS, iPadOS ou Android para facilitar a partilha entre vários colaboradores, uma prática comum em ambientes de trabalhadores na linha da frente.

Neste tutorial, você:

  • Adicionar suporte para o modo de conta única.
  • Configura a tua aplicação para usar SDM.
  • Detetar o modo de dispositivo partilhado.
  • Verifique se o utilizador com sessão iniciada mudou.

Pré-requisitos

Detetar o modo de dispositivo partilhado

Detetar o modo de dispositivo partilhado é importante para a sua aplicação. Muitas aplicações requerem uma alteração na sua experiência de utilizador (UX) quando a aplicação é usada num dispositivo partilhado. Por exemplo, a sua candidatura pode ter uma funcionalidade de "Inscrição", que não é apropriada para um trabalhador da linha da frente porque provavelmente já tem uma conta. Também pode querer adicionar segurança extra ao tratamento dos dados pela sua aplicação se estiver em modo dispositivo partilhado.

Utilize a API getDeviceInformationWithParameters:completionBlock: no MSALPublicClientApplication para determinar se uma aplicação está a correr num dispositivo em modo de dispositivo partilhado.

Os seguintes excertos de código mostram exemplos de utilização da getDeviceInformationWithParameters:completionBlock: API.

Swift

application.getDeviceInformation(with: nil, completionBlock: { (deviceInformation, error) in

    guard let deviceInfo = deviceInformation else {
        return
    }

    let isSharedDevice = deviceInfo.deviceMode == .shared
    // Change your app UX if needed
})

Objective-C

[application getDeviceInformationWithParameters:nil
                                completionBlock:^(MSALDeviceInformation * _Nullable deviceInformation, NSError * _Nullable error)
{
    if (!deviceInformation)
    {
        return;
    }

    BOOL isSharedDevice = deviceInformation.deviceMode == MSALDeviceModeShared;
    // Change your app UX if needed
}];

Obtenha o utilizador com sessão iniciada e determine se houve alteração de utilizador no dispositivo

Outra parte importante do suporte ao modo de dispositivo partilhado é determinar o estado do utilizador no dispositivo e apagar os dados da aplicação se o utilizador mudou ou se não houver utilizador no dispositivo. És responsável por garantir que os dados não são divulgados para outro utilizador.

Pode usar a API getCurrentAccountWithParameters:completionBlock: para consultar a conta com sessão iniciada no dispositivo.

Swift

let msalParameters = MSALParameters()
msalParameters.completionBlockQueue = DispatchQueue.main

application.getCurrentAccount(with: msalParameters, completionBlock: { (currentAccount, previousAccount, error) in

    // currentAccount is the currently signed in account
    // previousAccount is the previously signed in account if any
})

Objective-C

MSALParameters *parameters = [MSALParameters new];
parameters.completionBlockQueue = dispatch_get_main_queue();

[application getCurrentAccountWithParameters:parameters
                             completionBlock:^(MSALAccount * _Nullable account, MSALAccount * _Nullable previousAccount, NSError * _Nullable error)
{
    // currentAccount is the currently signed in account
    // previousAccount is the previously signed in account if any
}];

Iniciar sessão de forma global para um utilizador

Quando um dispositivo está configurado como um dispositivo partilhado, a sua aplicação pode ligar à acquireTokenWithParameters:completionBlock: API para iniciar sessão na conta. A conta estará disponível globalmente para todas as aplicações elegíveis no dispositivo após a primeira aplicação iniciar sessão na conta.

Objective-C

MSALInteractiveTokenParameters *parameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"api://myapi/scope"] webviewParameters:[self msalTestWebViewParameters]];

parameters.loginHint = self.loginHintTextField.text;

[application acquireTokenWithParameters:parameters completionBlock:completionBlock];

Terminar sessão globalmente para um utilizador

O código seguinte remove a conta com sessão iniciada e limpa os tokens em cache não só da aplicação, mas também do dispositivo que se encontra em modo de dispositivo partilhado. No entanto, não apaga os dados da sua candidatura. Deve apagar os dados da sua aplicação e eliminar quaisquer dados em cache que a sua aplicação possa estar a mostrar ao utilizador.

Swift

let account = .... /* account retrieved above */

let signoutParameters = MSALSignoutParameters(webviewParameters: self.webViewParamaters!)
signoutParameters.signoutFromBrowser = true // To trigger a browser signout in Safari.

application.signout(with: account, signoutParameters: signoutParameters, completionBlock: {(success, error) in
    if let error = error {

        // Signout failed

        return

    }

    // Sign out completed successfully

})

Objective-C

MSALAccount *account = ... /* account retrieved above */;

MSALSignoutParameters *signoutParameters = [[MSALSignoutParameters alloc] initWithWebviewParameters:webViewParameters];

signoutParameters.signoutFromBrowser = YES; // To trigger a browser signout in Safari.

[application signoutWithAccount:account signoutParameters:signoutParameters completionBlock:^(BOOL success, NSError * _Nullable error)

{

    if (!success)

    {

        // Signout failed

        return;

    }

    // Sign out completed successfully

}];

O suplemento Microsoft Enterprise SSO para dispositivos Apple limpa o estado apenas das aplicações. No navegador Safari, não limpa o estado. Pode usar a propriedade opcional signoutFromBrowser mostrada nos excertos de código para ativar a desconexão do navegador no Safari. Isto faz com que o navegador seja brevemente iniciado no dispositivo.

Receber transmissão para detetar saída global iniciada de outros aplicativos

Para receber a transmissão de mudança de conta, você precisa registrar um recetor de transmissão. Quando uma transmissão de alteração de conta é recebida, obtenha imediatamente o usuário conectado e determine se um usuário foi alterado no dispositivo. Se uma alteração for detetada, inicie a limpeza de dados para a conta conectada anteriormente. Recomenda-se parar corretamente todas as operações e fazer a limpeza de dados.

O trecho de código a seguir mostra como você pode registrar um recetor de transmissão.

NSString *const MSAL_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY = @"SHARED_MODE_CURRENT_ACCOUNT_CHANGED";

- (void) registerDarwinNotificationListener 

{ 

   CFNotificationCenterRef center =

   CFNotificationCenterGetDarwinNotifyCenter(); 

   CFNotificationCenterAddObserver(center, nil,

   sharedModeAccountChangedCallback,

   (CFStringRef)MSAL_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY, 

   nil, CFNotificationSuspensionBehaviorDeliverImmediately); 

} 

// CFNotificationCallbacks used specifically for Darwin notifications leave userInfo unused 

void sharedModeAccountChangedCallback(CFNotificationCenterRef center, void * observer, CFStringRef name, void const * object, __unused CFDictionaryRef userInfo) 

{ 

    // Invoke account cleanup logic here 

} 

Para mais informações sobre as opções disponíveis para CFNotificationAddObserver ou para ver as assinaturas dos métodos correspondentes em Swift, veja:

Para iOS, a sua aplicação requer uma permissão em segundo plano para permanecer ativa em segundo plano e ouvir as notificações do Darwin. A funcionalidade em segundo plano deve ser adicionada para suportar uma operação diferente em segundo plano – a sua aplicação pode estar sujeita a rejeição da Apple App Store se tiver uma capacidade em segundo plano apenas para ouvir notificações do Darwin. Se a sua aplicação já estiver configurada para completar operações em segundo plano, pode adicionar o ouvinte como parte dessa operação. Para mais informações sobre as capacidades em segundo plano do iOS, consulte Configurar modos de execução em segundo plano

Aplicações Microsoft que suportam o modo de dispositivo partilhado

Estas aplicações Microsoft suportam o modo de dispositivo partilhado Microsoft Entra:

Importante

A pré-visualização pública é fornecida sem um acordo de nível de serviço e não é recomendada para cargas de trabalho em produção. Algumas funcionalidades podem não ser suportadas ou ter capacidades limitadas. Para mais informações, consulte os Termos de Licença Universal para Serviços Online.

MDMs de terceiros que suportam o modo de dispositivo partilhado

Estes fornecedores terceiros de Mobile Gestão de Dispositivos (MDM) suportam o modo de dispositivo partilhado Microsoft Entra:

Passos seguintes

Para ver o modo dispositivo partilhado em ação, o seguinte exemplo de código no GitHub inclui um exemplo de execução de uma aplicação de trabalhador da linha da frente num dispositivo iOS em modo dispositivo partilhado:

Exemplo da Microsoft Graph API para MSAL iOS Swift