Бөлісу құралы:


Режим совместной работы с устройством Android

Сотрудники, взаимодействующие с клиентами, такие как продавцы, члены летного экипажа, а также работники выездного обслуживания, часто используют для работы общее мобильное устройство. Такие общие устройства могут представлять угрозу безопасности, если пользователи совместно (как намеренно, так и ненамеренно) используют на общем устройстве свои пароли и ПИН-коды для доступа к данным клиентов и компании.

Режим общего устройства позволяет настроить устройство Android 8.0 или более поздней версии, чтобы сотрудники могли безопасно предоставлять общий доступ к устройству. Сотрудники могут войти один раз и получить единый вход для всех приложений, поддерживающих эту функцию, что дает им быстрый доступ к информации. Когда сотрудники выходят после завершения смены или задачи, они автоматически выходят из устройства и всех поддерживаемых приложений, что делает устройство готовым для следующего пользователя.

Чтобы воспользоваться преимуществами функции режима общего устройства, разработчики приложений и администраторы облачных устройств работают вместе:

  1. Администраторы устройств подготавливают устройство к совместному использованию вручную или с помощью поставщика управления мобильными устройствами (MDM), например Microsoft Intune. Предпочтительный вариант — использовать MDM, так как он разрешает настройку устройства в режиме общего устройства в масштабе с помощью подготовки нулевого касания. MDM отправляет приложение Microsoft Authenticator на устройства и включает "Общий режим" для каждого устройства с помощью обновления управляемой конфигурации на устройство. Именно параметр общего режима изменяет поведение поддерживаемых приложений на устройстве. Эта конфигурация от поставщика MDM задает общий режим устройства для устройства и активирует регистрацию общего устройства с помощью приложения Authenticator.

  2. Разработчики приложений записывают приложение с одной учетной записью (приложения с несколькими учетными записями не поддерживаются в режиме общего устройства) для обработки следующего сценария:

    • Вход на уровне пользователя с помощью любого поддерживаемого приложения
    • Выход из пользовательского устройства на уровне любого поддерживаемого приложения
    • Запросите состояние устройства, чтобы определить, находится ли приложение на устройстве, которое находится в режиме общего устройства
    • Запрос состояния устройства пользователя, чтобы определить изменения в приложении с момента последнего использования.

    Поддерживающий режим общего устройства следует рассматривать как обновление компонентов для вашего приложения, и он может способствовать повышению его внедрения в средах, где одно устройство используется несколькими пользователями.

    Внимание

    Приложения Майкрософт, поддерживающие режим общего устройства в Android, не требуют каких-либо изменений и просто должны быть установлены на устройстве, чтобы получить преимущества, которые приходят с общим режимом устройства.

Настройка устройства в режиме общего устройства

Чтобы настроить устройство Android для поддержки режима общего устройства, оно должно работать под управлением Android OS 8.0 или более поздней версии. Устройство также должно быть удалено с помощью сброса фабрики или всех приложений с поддержкой режима общего устройства Майкрософт и других приложений с поддержкой общего устройства.

Microsoft Intune поддерживает подготовку устройств без касания для устройств в режиме общего устройства Microsoft Entra, что означает, что устройство можно настроить и зарегистрировать в Intune с минимальным взаимодействием с рабочей ролью передней линии. Сведения о настройке устройства в режиме общего устройства при использовании Microsoft Intune в качестве MDM см. в статье "Настройка регистрации для устройств в режиме общего устройства Microsoft Entra".

Изменение приложения Android для поддержки режима общего устройства

Вы должны гарантировать, что данные ваших пользователей не утекут к другим пользователям. В следующих разделах описаны полезные сигналы, указывающие приложению, что произошло изменение, которое должно быть обработано. Вы несете ответственность за проверку состояния пользователя на устройстве при каждом использовании приложения, а затем очистку данных предыдущего пользователя. Это включает в себя, если он перезагрузился из фонового режима в многофакторной задаче. При изменении пользователя необходимо убедиться в том, что данные предыдущего пользователя удалены и все кэшированные данные, отображаемые в приложении, также удалены. Мы настоятельно рекомендуем вам и вашей компании провести проверку безопасности после обновления приложения для работы в общем режиме.

Добавление пакета SDK библиотеки проверки подлинности Майкрософт (MSAL) в зависимости приложения

Добавьте библиотеку MSAL в качестве зависимости в файле build.gradle, как показано ниже.

dependencies{
  implementation 'com.microsoft.identity.client.msal:5.+'
}

Настройка приложения для использования режима общего устройства

Приложения, написанные с помощью пакета SDK библиотеки проверки подлинности Майкрософт (MSAL), могут управлять одной или несколькими учетными записями. Дополнительные сведения см. в статье о режиме одной учетной записи или нескольких учетных записей. Приложения в режиме совместной работы с устройством работают только в режиме одной учетной записи.

Если вы не планируете поддерживать режим нескольких учетных записей, установите значение "account_mode" "SINGLE" в файле конфигурации msal. Это гарантирует, что ваше приложение всегда будет получать ISingleAccountPublicClientApplication, что значительно упрощает интеграцию MSAL. Значением "account_mode" по умолчанию является "MULTIPLE", поэтому важно изменить это значение в файле конфигурации, если вы используете "single account" режим.

Ниже приведен пример файла конфигурации:

{
  "client_id": "Client ID after app registration at https://aka.ms/MobileAppReg",
  "authorization_user_agent": "WEBVIEW",
  "redirect_uri": "Redirect URI after app registration at https://aka.ms/MobileAppReg",
  "account_mode": "SINGLE",
  "broker_redirect_uri_registered": true,
  "authorities": [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount",
        "tenant_id": "common"
      }
    }
  ]
}

Дополнительные сведения о настройках в файле конфигурации см. в документации по настройке.

Поддержка одной учетной записи и нескольких учетных записей

Приложение может быть создано для поддержки работы как на личных, так и на общих устройствах. Если ваше приложение сейчас поддерживает несколько учетных записей, а вам нужна поддержка режима совместной работы с устройством, добавьте поддержку для режима одной учетной записи.

Кроме того, может понадобиться изменить поведение приложения в зависимости от типа устройства, на котором оно запущено. Используйте ISingleAccountPublicClientApplication.isSharedDevice(), чтобы определить, когда запускать режим одной учетной записи.

Существует два разных интерфейса, представляющих тип устройства, на котором установлено приложение. При запросе экземпляра приложения из фабрики приложений MSAL правильный объект приложения предоставляется автоматически.

Следующая объектная модель иллюстрирует тип объекта, который вы можете получить, и то, что он означает в контексте общего устройства:

Модель наследования общедоступных клиентских приложений

При получении объекта необходимо выполнить проверку типа и приведение PublicClientApplication к соответствующему интерфейсу. Следующий код проверяет наличие нескольких режимов учетной записи или режимов одной учетной записи и приводит объект приложения соответствующим образом:

private IPublicClientApplication mApplication;

        // Running in personal-device mode?
        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        // Running in shared-device mode?
        } else if (mApplication instanceOf ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

В зависимости от того, работает ли приложение на общем или личном устройстве, применяются следующие отличия:

Устройство с режимом совместной работы Личное устройство
Измерение счетов Одна учетная запись Несколько учетных записей
Вход Глобальный Глобальный
Выход Глобальный Каждое приложение может контролировать, является ли выход локальным для приложения.
Поддерживаемые типы учетных записей Только рабочие учетные записи Поддерживаются личные и рабочие учетные записи

Инициализация объекта PublicClientApplication

Если в файле конфигурации MSAL вы задали значение "account_mode":"SINGLE", возвращенный объект приложения можно без опасений приводить к типу ISingleAccountPublicCLientApplication.

private ISingleAccountPublicClientApplication mSingleAccountApp;

PublicClientApplication.create(
    this.getApplicationCOntext(),
    R.raw.auth_config_single_account,
    new PublicClientApplication.ApplicationCreatedListener() {

        @Override
        public void onCreated(IPublicClientApplication application){
            mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
        }

        @Override
        public void onError(MsalException exception){
            /*Fail to initialize PublicClientApplication */
        }
    });

Обнаружение режима общего устройства

Приложение должно уметь обнаруживать режим общего устройства. Во многих приложениях требуется изменение пользовательского интерфейса при использовании приложения на общем устройстве. Например, приложение может иметь функцию регистрации, которая не нужна линейным работникам (у них, скорее всего, уже есть учетные записи). Кроме того, может потребоваться дополнительный уровень безопасности при обработке данных в приложении, которое находится в режиме общего устройства.

С помощью API isSharedDevice в IPublicClientApplication определите, выполняется ли приложение на устройстве в режиме общего доступа.

В следующих фрагментах кода показаны примеры использования API isSharedDevice.

deviceModeTextView.setText(mSingleAccountApp.isSharedDevice() ? "Shared" : "Non-Shared");

Получение сведений о пользователе, выполнившем вход, и определение того, изменился ли пользователь на устройстве

Еще одной важной частью поддержки режима общего устройства является определение состояния пользователя на устройстве и очистка данных приложения, если пользователь изменился или нет пользователя вообще на устройстве. Вы несете ответственность за обеспечение утечки данных другому пользователю.

Для запроса учетной записи, выполнившей вход на устройстве, можно использовать API getCurrentAccountAsync.

Метод loadAccount позволяет извлечь учетную запись пользователя, выполнившего вход. Метод onAccountChanged определяет, изменился ли пользователь, выполнивший вход, и если да, выполняет очистку.

private void loadAccount()
{
  mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback())
  {
    @Override
    public void onAccountLoaded(@Nullable IAccount activeAccount)
    {
      if (activeAccount != null)
      {
        signedInUser = activeAccount;
        final AcquireTokenSilentParameters silentParameters = new AcquireTokenSilentParameters.Builder()
                        .fromAuthority(signedInUser.getAuthority())
                        .forAccount(signedInUser)
                        .withScopes(Arrays.asList(getScopes()))
                        .withCallback(getAuthSilentCallback())
                        .build();
        mSingleAccountApp.acquireTokenSilentAsync(silentParameters);
      }
    }
    @Override
    public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
    {
      if (currentAccount == null)
      {
        //Perform a cleanup task as the signed-in account changed.
        cleaUp();
      }
    }
    @Override
    public void onError(@NonNull Exception exception)
    {
        //getCurrentAccountAsync failed
    }
  }
}

Глобальный вход пользователя

Если устройство настроено в качестве общего, приложение может вызвать API signIn для входа в учетную запись. Эта учетная запись будет доступна глобально всем выбранным вами приложениям на устройстве после того, как в нее войдет первое приложение.

final SignInParameters signInParameters = ... /* create SignInParameters object */
mSingleAccountApp.signIn(signInParameters);

Глобальный выход пользователя

В приведенном далее примере кода удаляется учетная запись пользователя, выполнившего вход, а также кэшированные токены как из текущего приложения, так и с устройства в режиме общего доступа. Однако он не очищает данные из приложения. Необходимо очистить данные из приложения и очистить все кэшированные данные, которые приложение может отображать пользователю.

mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback() {
    @Override
    public void onSignOut() {
        // clear data from your application
    }

    @Override
    public void onError(@NonNull MsalException exception) {
        // signout failed, show error
    }
});

Получение трансляции для обнаружения глобального выхода, инициированного другими приложениями

Чтобы получить трансляцию изменений учетной записи, необходимо зарегистрировать приемник трансляции. Рекомендуется зарегистрировать приемник трансляции с помощью зарегистрированных в контексте приемников.

При получении трансляции изменений учетной записи немедленно получите пользователя, выполнившего вход, и определите, изменился ли пользователь на устройстве. При обнаружении изменения инициируйте очистку данных для ранее вошедшего в систему учетной записи. Рекомендуется правильно остановить любые операции и выполнить очистку данных.

В следующем фрагменте кода показано, как можно зарегистрировать приемник трансляции.

private static final String CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER = "com.microsoft.identity.client.sharedmode.CURRENT_ACCOUNT_CHANGED";
private BroadcastReceiver mAccountChangedBroadcastReceiver;
private void registerAccountChangeBroadcastReceiver(){
    mAccountChangedBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //INVOKE YOUR PRIOR ACCOUNT CLEAN UP LOGIC HERE
        }
    };
    IntentFilter filter = new

    IntentFilter(CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER);
    this.registerReceiver(mAccountChangedBroadcastReceiver, filter);
}

Приложения Майкрософт, которые поддерживают режим общего устройства

Эти приложения Майкрософт поддерживают режим общего устройства Microsoft Entra:

Сторонние MDM, поддерживающие режим общего устройства

Эти сторонние поставщики мобильных Управление устройствами (MDM) поддерживают режим общего устройства Microsoft Entra:

Выход с общего устройства и общие сведения о жизненном цикле приложения

При выходе пользователя необходимо принять меры для защиты конфиденциальности и данных пользователя. Например, если вы создаете приложение медицинских записей, необходимо убедиться, что при выходе пользователя из ранее отображаемых записей пациентов очищаются. Приложение должно быть подготовлено к конфиденциальности данных и проверять это каждый раз при выходе на передний план.

Когда приложение использует MSAL для выхода пользователя из приложения, работающего на устройстве в режиме совместного использования, учетная запись, в которую выполнен вход, и кэшированные токены удаляются как из приложения, так и с устройства.

На следующей схеме показан общий жизненный цикл приложения и типичные события, которые могут возникнуть во время выполнения приложения. Схема охватывает время запуска действия, входа и выхода учетной записи, а также как события, такие как приостановка, возобновление и остановка действия.

Жизненный цикл приложения общего устройства

Следующие шаги

Настройте устройство Android для запуска приложений в режиме общего устройства и протестируйте приложение.

Режим общего устройства для устройств Android