Пакет SDK Для Microsoft Information Protection — основные понятия подсистемы sdk для файлов
В mip::FileEngine
пакете SDK для файлов MIP предоставляется интерфейс для всех операций, выполняемых от имени указанного удостоверения. Один модуль будет добавлен для каждого пользователя, который входит в приложение, и все операции, выполняемые подсистемой, будут выполняться в контексте этого удостоверения.
У FileEngine
него есть две основные обязанности: перечисление меток для пользователя, прошедшего проверку подлинности, и создание обработчиков файлов для выполнения операций с файлами от имени пользователя.
mip::FileEngine
ListSensitivityLabels()
: получает список меток для загруженного обработчика.CreateFileHandler()
: создает определенныйmip::FileHandler
файл или поток.
Добавление обработчика файлов
Как описано в объектах profile and 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
должен быть чем-то, что позволяет обработчику легко подключаться к соответствующему пользователю. Например, адрес электронной почты, идентификатор участника-пользователя или 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
.
ListSensitivityLabels()
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()
можно использовать для отображения всех меток, доступных пользователю, а затем при выборе используйте идентификатор для применения меток к файлу.
Next Steps
Теперь, когда профиль загружен, модуль добавил и у нас есть метки, можно добавить обработчик для начала чтения, записи или удаления меток из файлов. См . обработчики файлов в пакете SDK MIP.