Поделиться через


Пакет программного обеспечения разработки (SDK) Microsoft Information Protection — концепции движка пакета SDK для файлов

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

У FileEngine него есть две основные обязанности: перечисление меток для пользователя, прошедшего проверку подлинности, и создание обработчиков файлов для выполнения операций с файлами от имени пользователя.

  • mip::FileEngine
  • ListSensitivityLabels(): получает список меток для загруженного движка.
  • CreateFileHandler(): создает mip::FileHandler для конкретного файла или потока.

Добавление обработчика файлов

Как описано в объектах Profile и Engine, движок может иметь два состояния - CREATED или LOADED. Если это не одно из этих двух состояний, он не существует. Для создания и загрузки состояния необходимо выполнить только один вызов FileProfile::LoadAsync. Если движок уже существует в кэшированном состоянии, он будет LOADED. Если он не существует, он будет CREATED и LOADED. CREATED означает, что приложение содержит всю информацию от службы, необходимую для загрузки движка. LOADED подразумевает, что все структуры данных, необходимые для использования подсистемы, были созданы в памяти.

Создание параметров обработчика файлов

Аналогично профилю, обработчику также требуется объект параметров. mip::FileEngine::Settings Этот объект хранит уникальный идентификатор двигателя, реализацию mip::AuthDelegate, настраиваемые клиентские данные, которые можно использовать для отладки или телеметрии, а также, если необходимо, языковой стандарт.

Здесь мы создадим FileEngine::Settings объект с именем engineSettings с помощью удостоверения пользователя приложения.

FileEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.
  authDelegateImpl,         // auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

При создании engineSettings таким образом важно также явно задать уникальный engineId с помощью:

engineSettings.SetEngineId(engineId);

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

Также допустимо предоставление пользовательского идентификатора движка.

FileEngine::Settings engineSettings(
  "myEngineId",     // string
  authDelegateImpl, // auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

В качестве рекомендации первый параметр idдолжен быть чем-то, что позволяет обработчику легко подключаться к соответствующему пользователю. Например, адрес электронной почты, UPN или GUID объекта AAD гарантирует, что идентификатор будет уникальным и может быть загружен из локального состояния без вызова службы.

Добавление обработчика файлов

Чтобы добавить двигатель, мы вернемся к шаблону обещания/фьючерса, используемому для загрузки профиля. Вместо того чтобы создавать обещание для mip::FileProfile, оно создается с помощью mip::FileEngine.

  //auto profile will be std::shared_ptr<mip::FileProfile>
  auto profile = profileFuture.get();

  // Instantiate the AuthDelegate implementation.
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);

  //Create the FileEngine::Settings object
  FileEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  //Create a promise for std::shared_ptr<mip::FileEngine>
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::FileEngine>>>();

  //Instantiate the future from the promise
  auto engineFuture = enginePromise->get_future();

  //Add the engine using AddEngineAsync, passing in the engine settings and the promise
  profile->AddEngineAsync(engineSettings, enginePromise);

  //get the future value and store in std::shared_ptr<mip::FileEngine>
  auto engine = engineFuture.get();

Конечным результатом приведенного выше кода является добавление движка для аутентифицированного пользователя в профиль.

Список меток чувствительности

Используя добавленный обработчик, теперь можно перечислить все метки конфиденциальности, доступные для пользователя, прошедшего проверку подлинности, путем вызова engine->ListSensitivityLabels().

ListSensitivityLabels() Будет получен список меток и атрибутов этих меток для конкретного пользователя из службы. Результат хранится в векторе std::shared_ptr<mip::Label>.

Дополнительные сведения см. здесьmip::Label.

Список меток чувствительности()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

Или упрощено:

auto labels = engine->ListSensitivityLabels();

Печать имен — это простой способ показать, что мы успешно извлекли политику из службы и смогли получить метки. Чтобы применить метку, требуется идентификатор метки. Приведенный ниже код выполняет итерацию по всем меткам, отображая name и id для каждой родительской и дочерней метки.

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

Коллекция mip::Label, возвращаемая GetSensitivityLabels(), может быть использована для отображения всех меток, доступных пользователю, а затем, при выборе, можно использовать идентификатор для применения меток к файлу.

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

Теперь, когда профиль загружен, двигатель добавлен, и у нас есть метки, мы можем добавить обработчик, чтобы начать читать, записывать или удалять метки из файлов. См. обработчики файлов в SDK MIP.