Modificar seu aplicativo iOS ou iPadOS para dar suporte ao modo de dispositivo compartilhado

Neste tutorial, você aprenderá a modificar um aplicativo iOS ou iPadOS para dar suporte ao SDM (Modo de Dispositivo Compartilhado). O SDM é um recurso Microsoft Entra ID que permite que as organizações configurem um dispositivo iOS, iPadOS ou Android para fácil compartilhamento entre vários funcionários, uma prática comum nas configurações de trabalho de linha de frente.

Neste tutorial, você:

  • Adicione suporte para o modo de conta única.
  • Configure seu aplicativo para usar o SDM.
  • Detectar o modo compartilhado do dispositivo.
  • Identifique se o usuário conectado foi alterado.

Pré-requisitos

Detectar o modo compartilhado do dispositivo

A detecção do modo de dispositivo compartilhado é importante para seu aplicativo. Muitos aplicativos exigem uma alteração na experiência do usuário (UX) quando o aplicativo é usado em um dispositivo compartilhado. Por exemplo, seu aplicativo pode ter um recurso de "Inscrição", o que não é apropriado para um trabalhador de linha de frente, pois eles provavelmente já têm uma conta. Talvez você também queira adicionar segurança extra ao tratamento de dados do aplicativo se ele estiver no modo de dispositivo compartilhado.

Use a API getDeviceInformationWithParameters:completionBlock: no MSALPublicClientApplication para determinar se um aplicativo está em execução em um dispositivo no modo de dispositivo compartilhado.

Os snippets de código a seguir mostram exemplos de como usar a 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
}];

Obter o usuário conectado e determinar se houve mudança de usuário no dispositivo

Outra parte importante do suporte ao modo de dispositivo compartilhado é determinar o estado do usuário no dispositivo e limpar os dados do aplicativo se um usuário tiver sido alterado ou se não houver nenhum usuário no dispositivo. Você é responsável por garantir que os dados não sejam vazados para outro usuário.

Você pode usar getCurrentAccountWithParameters:completionBlock: a API para consultar a conta atualmente assinada 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
}];

Efetuar login de um usuário de forma global

Quando um dispositivo é configurado como um dispositivo compartilhado, seu aplicativo pode chamar a acquireTokenWithParameters:completionBlock: API para entrar na conta. A conta estará disponível globalmente para todos os aplicativos qualificados no dispositivo depois que o primeiro aplicativo entrar 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];

Desconectar um usuário globalmente

O código a seguir remove a conta conectada e limpa os tokens em cache não apenas do aplicativo, mas também do dispositivo que está em modo de dispositivo compartilhado. No entanto, ele não limpa os dados do aplicativo. Você deve limpar os dados do aplicativo e limpar todos os dados armazenados em cache que seu aplicativo possa estar exibindo para o usuário.

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 plug-in do Microsoft Enterprise SSO para dispositivos Apple limpa o estado apenas dos aplicativos. Ele não limpa o estado no navegador Safari. Você pode usar a propriedade opcional signoutFromBrowser mostrada em trechos de código para acionar o encerramento da sessão do navegador no Safari. Isso faz com que o navegador seja iniciado brevemente no dispositivo.

Receber uma difusão para detectar a saída global iniciada em outros aplicativos

Para receber o broadcast de alteração de conta, você precisa registrar um broadcast receiver. Quando uma difusão de alteração de conta for recebida, obtenha imediatamente o usuário conectado e determine se o usuário foi alterado no dispositivo. Se uma alteração for detectada, inicie a limpeza de dados da conta inserida anteriormente. É recomendável interromper corretamente todas as operações e fazer a limpeza dos dados.

O snippet de código abaixo mostra como você pode registrar um receptor 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 obter mais informações sobre as opções disponíveis para CFNotificationAddObserver ou para ver as assinaturas de método correspondentes no Swift, consulte:

Para iOS, seu aplicativo requer uma permissão em segundo plano para permanecer ativo em segundo plano e ouvir as notificações de Darwin. A funcionalidade em segundo plano deve ser adicionada para dar suporte a uma operação em segundo plano diferente– seu aplicativo pode estar sujeito a rejeição da Apple App Store se ele tiver uma funcionalidade em segundo plano apenas para escutar as notificações de Darwin. Se o aplicativo já estiver configurado para concluir as operações em segundo plano, você poderá adicionar o ouvinte como parte dessa operação. Para obter mais informações sobre os recursos em segundo plano do iOS, consulte Configurando modos de execução em segundo plano

Microsoft aplicativos que dão suporte ao modo de dispositivo compartilhado

Esses aplicativos da Microsoft dão suporte ao modo de dispositivo compartilhado do Microsoft Entra:

Importante

A visualização pública é fornecida sem um contrato de nível de serviço e não é recomendada para cargas de trabalho de produção. Alguns recursos podem não ter suporte ou ter recursos restritos. Para obter mais informações, consulte Os Termos de Licença Universal para Serviços Online.

MDMs de terceiros que dão suporte ao modo de dispositivo compartilhado

Esses provedores terceirizados de MDM (Mobile Gerenciamento de Dispositivos) dão suporte ao modo de dispositivo compartilhado do Microsoft Entra:

Próximas Etapas 

Para ver o modo de dispositivo compartilhado em ação, o exemplo de código a seguir no GitHub inclui um exemplo de execução de um aplicativo de trabalho de linha de frente em um dispositivo iOS no modo de dispositivo compartilhado:

Exemplo da Microsoft API do Graph com MSAL iOS Swift