Concepto: Delegación en el SDK de MIP

El SDK de Microsoft Information Protection proporciona dos rutas de acceso para que las aplicaciones basadas en servicios actúen en nombre de otro usuario. A veces, es necesario delegar cuando queremos etiquetar, proteger o consumir archivos en el contexto de una identidad de usuario diferente de la identidad de servicio. Esta identidad delegada se puede establecer en el nivel de motor o controlador, lo que dependerá de cada caso de uso.

Delegación basada en la configuración del motor

El SDK de MIP permite proporcionar una dirección de correo electrónico de usuario delegado en el objeto de configuración para todos los SDK: archivos, protección y directivas. Esto se logra estableciendo la propiedad DelegatedUserEmail en el objeto de configuración. El resultado es que el motor inicializado con ese objeto de configuración realizará todas las operaciones de MIP como si fuera el usuario facilitado a la propiedad DelegatedUserEmail. Se capturará la directiva para ese usuario específico y todas las operaciones de protección se realizarán en nombre de ese usuario, por ejemplo, actuar como el propietario de los archivos que están protegidos.

Este patrón es útil cuando su aplicación basada en servicios necesita funcionar completamente en nombre del usuario. En este caso, debe capturarse la directiva para el usuario especificado y las operaciones de descifrado deben realizarse en el contexto de la identidad de ese usuario. Es importante que, al crear este motor, la aplicación especifique un identificador de motor único para ese usuario, lo que suele ser la dirección de correo. Esto garantiza que se aprovecharán las ventajas del almacenamiento en caché. Si no se proporciona un identificador de motor único, la aplicación podría experimentar un rendimiento deficiente.

SDK de archivos

En el ejemplo siguiente se muestra cómo establecer la identidad delegada para una aplicación del SDK de archivos 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 el SDK de archivos 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 el SDK de archivos 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();

Como resultado, todos los motores de archivos se crearán en nombre del usuario especificado.

Delegación basada en controladores

En casos en los que solo necesitamos proteger los archivos en el contexto de una identidad de usuario específica, FileHandler proporciona un método para pasar la identidad de usuario a través de un objeto ProtectionSettings. Las operaciones de directivas y 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 archivos

La única operación que se completará como el usuario facilitado al objeto ProtectionSettings será la aplicación de protección de forma directa o mediante una etiqueta. Este objeto se pasa a las funciones SetLabel() o SetProtection() del SDK de archivos.

En este ejemplo se muestra cómo realizar una operación de protección delegada en el SDK de archivos 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 delegada en el SDK de archivos en C++.

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

Como resultado, todas las operaciones de escritura del controlador en las que se aplique 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 archivos. 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 archivos, la dirección de correo delegada se establece a través del objeto de configuración para cada tipo de controlador.

.NET

En este ejemplo se muestra cómo realizar una 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 un 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 un 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 una 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 diferente de permisos.

Escenario Permiso necesario
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 ver una lista completa de los permisos y dónde establecerlos, consulte Permisos de API para el SDK de Microsoft Information Protection.

Pasos siguientes