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


Концепция — делегирование в пакете SDK для MIP

Пакет SDK Microsoft Information Protection предоставляет два пути для служебных приложений, чтобы действовать от имени другого пользователя. Делегирование может потребоваться, если файлы должны быть помечены, защищены или использованы в контексте удостоверения пользователя, отличного от удостоверения службы. Это делегированное удостоверение можно задать на уровне движка или обработчика, и то, где оно будет задано, будет зависеть от варианта использования.

Делегирование, основанное на настройках движка

SDK MIP поддерживает указание делегированного адреса электронной почты пользователя в объекте настроек для всех SDK: файлового, защитного и политик. Это достигается путем задания DelegatedUserEmail свойства в объекте settings. Результатом является то, что подсистема, инициализированная с этим объектом параметров, будет выполнять все операции MIP , как будто это был пользователь, предоставленный свойству DelegatedUserEmail . Политика будет получена для конкретного пользователя, и все операции защиты будут выполняться от имени этого пользователя, включая признание его владельцем защищенных файлов.

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

Пакет SDK для файлов

В следующем примере показано, как задать делегированное удостоверение для приложения пакета SDK для файлов в C++ и C#. Тот же шаблон можно использовать для пакета SDK политики.

В этом примере показано, как создать подсистему делегатов в пакете SDK для файлов в .NET.

// C# Example for creating a delegated file engine
string delegatedUserEmail = "[email protected]";
var engineSettings = new PolicyEngineSettings(delegatedUserEmail, authDelegate, "", "en-US")
{
    // Provide the identity for service discovery.
    Identity = identity,
    // Set the identity for which all MIP operations will be performed.
    DelegatedUserEmail = delegatedUserEmail
};

var engine = Task.Run(async () => await profile.AddEngineAsync(engineSettings)).Result;

В этом примере показано, как создать подсистему делегатов в пакете SDK для файлов в C++.

// C++ Example for creating a delegated file engine
std::string delegatedUserEmail = "[email protected]";
FileEngine::Settings engineSettings(delegatedUserEmail, mAuthDelegate, "", "en-US", false);
// Set the identity for which all MIP operations will be performed. 
engineSettings.SetDelegatedUserEmail(delegatedUserEmail);

auto enginePromise = std::make_shared<std::promise<std::shared_ptr<FileEngine>>>();
auto engineFuture = enginePromise->get_future();

mProfile->AddEngineAsync(engineSettings, enginePromise);
mEngine = engineFuture.get();

Результатом является то, что все модули файлов будут созданы от имени указанного пользователя.

Делегирование на основе обработчика

В сценариях, когда необходимо защитить файлы только в контексте определенного удостоверения пользователя, FileHandler предоставляет метод передачи удостоверения пользователя через ProtectionSettings объект. Политика и любые операции расшифровки будут выполняться как аутентифицированный идентификатор службы. Действие защиты будет выполняться от имени указанного пользователя; этот пользователь будет владельцем защиты MIP в документе.

Пакет SDK для файлов

Только операция применения защиты непосредственно или через метку будет выполняться, как указано пользователем в объекте ProtectionSettings. Этот объект передается в функции SetLabel() или SetProtection() в SDK для работы с файлами.

В этом примере показано, как выполнить операцию защиты делегатов в пакете SDK для файлов в .NET.

string delegatedUserEmail = "[email protected]";
ProtectionSettings protectionSettings = new ProtectionSettings()
{
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};
handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, protectionSettings);
// Similar pattern for SetProtection()
// handler.SetProtection(protectionDescriptor, protectionSettings);

В этом примере показано, как выполнить операцию защиты делегатов в пакете SDK для файлов в C++.

mip::ProtectionSettings protectionSettings;
// Set the delegated mail address 
protectionSettings.SetDelegatedUserEmail(delegatedUserEmail);
handler->SetLabel(mEngine->GetLabelById(labelId), labelingOptions, protectionSettings);

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

Пакет SDK для защиты

Пакет SDK для защиты отличается от пакета SDK для файлов. Существует два типа обработчиков , которые можно создать, один для публикации и один для потребления. Как и в пакете SDK для файлов, делегированный почтовый адрес устанавливается через объект settings для каждого типа обработчика.

.NET

В этом примере показано, как выполнять делегированную публикацию.

string delegatedUserEmail = "[email protected]";
PublishingSettings publishingSettings = new PublishingSettings(protectionDescriptor)
{
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};          
var protectionHandler = engine.CreateProtectionHandlerForPublishing(publishingSettings);

В этом примере показано, как выполнять делегированное потребление.

string delegatedUserEmail = "[email protected]";
ConsumptionSettings consumptionSettings = new ConsumptionSettings(plInfo)
{                
    ContentName = "A few bytes.",
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};
var protectionHandler = engine.CreateProtectionHandlerForConsumption(consumptionSettings);

C++

В этом примере показано, как выполнять делегированное потребление.

string delegatedUserEmail = "[email protected]";
mip::ProtectionHandler::PublishingSettings publishingSettings = mip::ProtectionHandler::PublishingSettings(descriptor);
// Set the delegated mail address 
publishingSettings.SetDelegatedUserEmail(delegatedUserEmail);
mEngine->CreateProtectionHandlerForPublishingAsync(publishingSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();	

В этом примере показано, как выполнять делегированную публикацию.

string delegatedUserEmail = "[email protected]";
mip::ProtectionHandler::ConsumptionSettings consumptionSettings = mip::ProtectionHandler::ConsumptionSettings(serializedPublishingLicense);
// Set the delegated mail address 
consumptionSettings.SetDelegatedUserEmail(delegatedUserEmail);
mEngine->CreateProtectionHandlerForConsumptionAsync(consumptionSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();	

Необходимые разрешения

Для каждого из описанных выше сценариев требуется другой набор разрешений.

Сценарий Требуется разрешение
Файловый движок делегированного SDK UnifiedPolicy.Tenant.Read
Content.DelegatedReader
Content.DelegatedWriter
Движок делегирования SDK для политики UnifiedPolicy.Tenant.Read
Делегированный обработчик пакета SDK для файлов Content.DelegatedWriter
Делегированная публикация пакета SDK для защиты Content.DelegatedWriter
Делегированное использование Protection SDK Content.DelegatedReader

Полный обзор разрешений и их указание см. в разделе "Разрешения API" для пакета SDK Microsoft Information Protection.

Дальнейшие шаги