Concepto: delegación en el SDK de MIP

El Microsoft Information Protection SDK proporciona dos rutas para que las aplicaciones basadas en servicios actúen en nombre de otro usuario. La delegación puede ser necesaria cuando los archivos necesitan etiquetarse, protegerse o consumirse en el contexto de una identidad de usuario diferente de la identidad del servicio. Esta identidad delegada se puede establecer en el nivel del motor o controlador y el lugar donde se establezca dependerá del caso de uso.

Delegación basada Configuración motor

El SDK de MIP admite proporcionar una dirección de correo electrónico de usuario delegada en el objeto de configuración para todos los SDK; Archivo, protección y directiva. Esto se consigue estableciendo la DelegatedUserEmail propiedad en el objeto de configuración. El resultado es que el motor inicializado con ese objeto de configuración realizará todas las operaciones MIP como si fuera el usuario proporcionado a la propiedad. La directiva se capturará para ese usuario específico y todas las operaciones de protección se realizarán como ese usuario, incluido ser el propietario de los archivos que están protegidos.

Este patrón es útil cuando la aplicación basada en servicios necesita funcionar completamente como usuario; directiva debe capturarse solo para el usuario especificado y cualquier operación de descifrado debe realizarse en el contexto de la identidad del usuario. Es importante que al crear este motor, la aplicación especifique un id. de motor único para ese usuario, a menudo la dirección de correo. Esto garantiza que las ventajas del almacenamiento en caché se realizarán. Si no se proporciona un id. de motor único, es posible que la aplicación experimente un rendimiento deficiente.

SDK de archivo

En el ejemplo siguiente se muestra cómo establecer la identidad delegada para una aplicación de SDK de archivo en C++ y C#. Se puede usar el mismo patrón para el SDK de directivas.

En este ejemplo se muestra cómo crear un motor delegado en sdk de archivo en .NET.

// 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;

En este ejemplo se muestra cómo crear un motor delegado en sdk de archivo en C++.

// 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();

El resultado es que todos los motores de archivo se crearán en nombre del usuario especificado.

Delegación basada en controladores

En escenarios en los que solo necesitamos proteger archivos en el contexto de una identidad de usuario específica, se proporciona un método para pasar la identidad de usuario a través de un ProtectionSettings objeto. La directiva y las operaciones de descifrado se realizarán como identidad de servicio autenticada. La acción de protección se realizará en nombre del usuario especificado; ese usuario será el propietario de la protección mip en el documento.

SDK de archivo

Solo se realizará la operación de aplicar protección directamente o a través de la etiqueta como el usuario proporcionado al ProtectionSettings objeto. Este objeto se pasa a las SetLabel() funciones o del SDK de SetProtection() archivo.

En este ejemplo se muestra cómo realizar una operación de protección de delegado en sdk de archivo en .NET.

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);

En este ejemplo se muestra cómo realizar una operación de protección de delegado en sdk de archivo en C++.

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

El resultado es que todas las operaciones de escritura del controlador en las que se aplica la protección se realizarán como usuario delegado.

SDK de protección

El SDK de protección funciona de forma diferente que el SDK de archivo. Hay dos tipos de controladores que se pueden crear, uno para la publicación y otro para el consumo. De forma similar al SDK de archivo, la dirección de correo delegado se establece a través del objeto de configuración para cada tipo de controlador.

.NET

En este ejemplo se muestra cómo realizar la publicación delegada.

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

En este ejemplo se muestra cómo realizar el consumo delegado.

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++

En este ejemplo se muestra cómo realizar el consumo delegado.

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();	

En este ejemplo se muestra cómo realizar la publicación delegada.

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();	

Permisos necesarios

Cada uno de los escenarios anteriores requiere un conjunto de permisos diferente.

Escenario Permiso obligatorio
Motor delegado del SDK de archivos UnifiedPolicy.Tenant.Read
Content.DelegatedReader
Content.DelegatedWriter
Motor delegado del SDK de directivas UnifiedPolicy.Tenant.Read
Controlador delegado del SDK de archivos Content.DelegatedWriter
Publicación delegada del SDK de protección Content.DelegatedWriter
Consumo delegado del SDK de protección Content.DelegatedReader

Para una revisión completa de los permisos y dónde establecerlos, revise los permisos de la API para el SDK Microsoft Information Protection datos

Pasos siguientes