Microsoft Information Protection SDK: conceptos de perfil sdk de archivo

El perfil es la clase raíz para todas las operaciones del SDK de MIP. Antes de usar cualquiera de las funciones del SDK de archivo, debe crearse una y todas las operaciones futuras se realizarán por el perfil o por otros objetos agregados FileProfile al perfil. FileProfile

Hay algunos requisitos previos de código que deben cumplirse antes de intentar crear una instancia de un perfil:

  • MipContext se ha creado y almacenado en un objeto accesible para el mip::FileProfile objeto.
  • ConsentDelegateImpl implementa mip::ConsentDelegate .
  • La aplicación se ha registrado en Azure Active Directory y el id. de cliente está codificado de forma automática en los archivos de configuración o aplicación.
  • Se ha implementado correctamente una herencia mip::FileProfile::Observer de clase.

Cargar un perfil

Con las ProfileObserver y ConsentDelegateImpl , definidas, mip::FileProfile ahora se pueden crear instancias. Crear el mip::FileProfile objeto requiere [ ] tener y almacenar toda la información de configuración sobre el archivo mip::MipContextmip::FileProfile::SettingsFileProfile .

FileProfile::Configuración Parámetros

El FileProfile::Settings constructor acepta cinco parámetros, que se muestran a continuación:

  • std::shared_ptr<MipContext>: el mip::MipContext objeto que se inicializó para almacenar información de la aplicación, ruta de acceso de estado, etc.
  • mip::CacheStorageType: Define cómo almacenar el estado: en la memoria, en el disco o en el disco y cifrado.
  • std::shared_ptr<mip::ConsentDelegate>: Puntero compartido de clase mip::ConsentDelegate .
  • std::shared_ptr<mip::FileProfile::Observer> observer: Un puntero compartido a la implementación del Observer perfil (en PolicyProfile , y ProtectionProfileFileProfile ).

En los ejemplos siguientes se muestra cómo crear el objeto con almacenamiento local para almacenamiento de estado, así como solo profileSettings en memoria.

Almacenar el estado solo en la 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

Configuración de perfil de lectura y escritura desde la ruta de almacenamiento en disco

El siguiente snip de código indicará al usuario que almacene todos los datos de FileProfile 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

Cargar el perfil

Con cualquiera de los detalles de enfoque anteriores, ahora use el patrón de promesa/futuro para cargar el FileProfile .

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

Si hemos cargado un perfil y esa operación se ha realizado correctamente, ProfileObserver::OnLoadSuccess nuestra implementación mip::FileProfile::Observer::OnLoadSuccess se denomina. El objeto resultante o el puntero de excepción, así como el contexto, se pasan como parámetros a la función. El contexto es un puntero a los std::promise que hemos creado para controlar la operación asincrónica. La función simplemente establece el valor de la promesa en el objeto FileProfile que se ha pasado para el primer parámetro. Cuando se usa la función Future.get() principal, el resultado se puede almacenar en un objeto nuevo.

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

Ponerla juntos

Después de haber implementado completamente los observadores y el delegado de autenticación, ahora es posible cargar por completo un perfil. El botón de seguridad de código siguiente supone que todos los encabezados necesarios ya están incluidos.

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 resultado final es que hemos cargado correctamente el perfil y almacenado en el objeto llamado profile .

Pasos siguientes

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