SDK de Microsoft Information Protection: Conceptos del perfil del SDK de archivos

En el SDK de MIP, el perfil es la clase raíz para todas las operaciones. Antes de usar cualquier funcionalidad del SDK de archivos, cree un FileProfile. El perfil u otros objetos agregados al perfil realizan todas las operaciones futuras.

Cumpla los siguientes requisitos previos de código antes de crear una instancia de un perfil:

  • MipContext: cree MipContext y almacénelo en un objeto accesible para el mip::FileProfile objeto.
  • Delegado de consentimiento: ConsentDelegateImpl implementa mip::ConsentDelegate.
  • Registro de aplicaciones: registre la aplicación en Microsoft Entra ID y codifique de forma rígida el identificador de cliente en los archivos de configuración o aplicación.
  • Observador de perfil de archivo: implemente una clase que herede mip::FileProfile::Observer.

Cargar un perfil

Después de definir ProfileObserver y ConsentDelegateImpl, puede crear una instancia de mip::FileProfile. La creación del objeto mip::FileProfile requiere mip::MipContext y mip::FileProfile::Settings, que almacena toda la información de configuración sobre FileProfile.

Parámetros de FileProfile::Settings

El FileProfile::Settings constructor acepta los cinco parámetros siguientes:

  • std::shared_ptr<MipContext>: El objeto mip::MipContext que fue inicializado para almacenar los datos de la aplicación, la ruta del estado, etc.
  • mip::CacheStorageType: define cómo almacenar el estado: en la memoria, en el disco o en el disco con cifrado.
  • std::shared_ptr<mip::ConsentDelegate>: puntero compartido de la clase mip::ConsentDelegate.
  • std::shared_ptr<mip::FileProfile::Observer> observer: Un puntero compartido a la implementación del perfil Observer (en PolicyProfile, ProtectionProfile y FileProfile).

En los ejemplos siguientes se muestra cómo crear el profileSettings objeto mediante el almacenamiento local para el almacenamiento de estado o solo en memoria.

Almacenamiento del estado solo en memoria

mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };

std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
			                                                                                      "mip_data",
                                                                                       			  mip::LogLevel::Trace,
                                                                                                  false);

std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);

FileProfile::Settings profileSettings(
    mMipContext,                                  // mipContext object
    mip::CacheStorageType::InMemory,              // use in memory storage
    std::make_shared<ConsentDelegateImpl>(),      // new consent delegate
    std::make_shared<FileProfileObserverImpl>()); // new protection profile observer

Leer/escribir la configuración del perfil desde la ruta de almacenamiento en el disco

El siguiente fragmento de código indica FileProfile a que almacene todos los datos de estado de la aplicación en ./mip_app_data.

mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };

std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
				                                                                                  "mip_data",
                                                                                        		  mip::LogLevel::Trace,
                                                                                                  false);

std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);

FileProfile::Settings profileSettings(
    mMipContext,                                   // mipContext object
    mip::CacheStorageType::OnDisk,                 // use on disk storage    
    std::make_shared<ConsentDelegateImpl>(),       // new consent delegate
    std::make_shared<FileProfileObserverImpl>());  // new protection profile observer

Carga del perfil

Después de usar uno u otro enfoque anterior, usa el patrón promise/future para cargar FileProfile.

auto profilePromise = std::make_shared<std::promise<std::shared_ptr<FileProfile>>>();
auto profileFuture = profilePromise->get_future();
FileProfile::LoadAsync(profileSettings, profilePromise);

Si la aplicación carga correctamente un perfil, ProfileObserver::OnLoadSuccess, se invoca la implementación de mip::FileProfile::Observer::OnLoadSuccess. El SDK pasa el objeto resultante o el puntero de excepción y el contexto, como parámetros a la función. El contexto es un puntero al std::promise creado para gestionar la operación asíncrona. La función establece el valor de la promesa en el objeto FileProfile pasado para el primer parámetro. Cuando la función principal usa Future.get(), puede almacenar el resultado en un nuevo objeto.

//get the future value and store in profile. 
auto profile = profileFuture.get();

Ensamblándolo

Después de implementar los observadores y el delegado de autenticación, ya puede cargar un perfil por completo. En el siguiente fragmento de código se supone que ya se incluyen todos los encabezados necesarios.

int main()
{
    const string userName = "MyTestUser@contoso.com";
    const string password = "P@ssw0rd!";
    const string clientId = "MyClientId";

    mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };

    std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
				                                                                                      "mip_data",
                                                                                        			  mip::LogLevel::Trace,
                                                                                                      false);

    std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);

    FileProfile::Settings profileSettings(
        mMipContext,                                   // MipContext object
        mip::CacheStorageType::OnDisk,                 // use on disk storage        
        std::make_shared<ConsentDelegateImpl>(),       // new consent delegate
        std::make_shared<FileProfileObserverImpl>());  // new file profile observer

        auto profilePromise = std::make_shared<promise<shared_ptr<FileProfile>>>();
        auto profileFuture = profilePromise->get_future();
        FileProfile::LoadAsync(profileSettings, profilePromise);
        auto profile = profileFuture.get();
}

El código carga el perfil y lo almacena en el objeto denominado profile.

Pasos siguientes

Ahora que se agrega el perfil, el siguiente paso es agregar un motor al perfil.