概念 - MIP SDK 中的委派

该Microsoft 信息保护 SDK 为基于服务的应用程序代表另一个用户操作提供了两个路径。 当需要在不同于服务标识的用户标识上下文中标记、保护或使用文件时,可能需要委派。 可在引擎或处理程序级别设置此委托标识,其设置位置将取决于用例。

基于设置的委派

MIP SDK 支持在所有 SDK 的设置对象中提供委派的用户电子邮件地址;文件、保护和策略。 这可以通过在 settings 对象 DelegatedUserEmail 上设置 属性实现。 结果是,使用该设置对象初始化的引擎将执行所有 MIP 操作,就像它是提供给属性 的用户一样。 将为该特定用户提取策略,所有保护操作都将以该用户(包括受保护文件的所有者)执行。

当基于服务的应用程序需要以用户形式完全运行时,此模式非常有用;只需为指定用户提取策略,并且任何解密操作都需要在用户标识的上下文中执行。 创建此引擎时,应用程序必须指定该用户唯一的引擎 ID,通常是电子邮件地址。 这可确保实现缓存的好处。 如果未提供唯一的引擎 ID,应用程序可能遇到性能不佳的问题。

文件 SDK

以下示例演示如何使用 C++ 和 C# 为文件 SDK 应用程序设置委托C#。 策略 SDK 可以使用相同的模式。

此示例演示如何在 .NET 中的文件 SDK 创建委托引擎。

// C# Example for creating a delegated file engine
string delegatedUserEmail = "alice@contoso.com";
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;

此示例演示如何使用 C++ 在文件 SDK 创建委托引擎。

// C++ Example for creating a delegated file engine
std::string delegatedUserEmail = "alice@contoso.com";
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();

结果是代表指定用户创建所有文件引擎。

基于处理程序的委派

在只需保护特定用户标识上下文中的文件的方案中,提供了一种通过 对象 传递用户标识 ProtectionSettings 的方法。 策略和任何解密操作都将作为经过身份验证的服务 标识执行。 保护操作将代表指定用户执行;该用户将成为 文档 上的 MIP 保护的所有者。

文件 SDK

只有直接或通过标签应用保护的操作将作为提供给对象 ProtectionSettings 的用户执行。 此对象传递到文件 SDK SetLabel() 中的 或 SetProtection() 函数。

此示例演示如何在 .NET 中的文件 SDK 中执行委托保护操作。

string delegatedUserEmail = "bob@contoso.com";
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);

此示例演示如何在 C++ 的文件 SDK 中执行委托保护操作。

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

结果是应用保护 的所有 处理程序写入操作都将作为委派用户执行。

保护 SDK

保护 SDK 的功能与文件 SDK 不同。 可以 创建两 种类型的处理程序,一种用于发布,另一种用于使用。 与文件 SDK 类似,委派的电子邮件地址是通过每种类型的处理程序的设置对象设置的。

.NET

此示例演示如何执行 委派发布

string delegatedUserEmail = "bob@contoso.com";
PublishingSettings publishingSettings = new PublishingSettings(protectionDescriptor)
{
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};          
var protectionHandler = engine.CreateProtectionHandlerForPublishing(publishingSettings);

此示例演示了如何执行 委托使用

string delegatedUserEmail = "bob@contoso.com";
ConsumptionSettings consumptionSettings = new ConsumptionSettings(plInfo)
{                
    ContentName = "A few bytes.",
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};
var protectionHandler = engine.CreateProtectionHandlerForConsumption(consumptionSettings);

C++

此示例演示了如何执行 委托使用

string delegatedUserEmail = "bob@contoso.com";
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 = "bob@contoso.com";
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
保护 SDK 委托使用 Content.DelegatedReader

有关权限和设置位置的完整评审,请查看 Microsoft 信息保护 SDK 的API 权限

下一步