Microsoft Information Protection SDK - Concetti relativi al profilo di File SDK

Il profilo è la classe radice per tutte le operazioni in MIP SDK. Prima di usare qualsiasi funzionalità di File SDK, creare un oggetto FileProfile. Il profilo o altri oggetti aggiunti al profilo eseguono tutte le operazioni future.

Assicurati di soddisfare i seguenti prerequisiti del codice prima di istanziare un profilo:

  • MipContext: crearlo MipContext e archiviarlo in un oggetto accessibile all'oggetto mip::FileProfile .
  • Delegato di consenso: ConsentDelegateImpl implementa mip::ConsentDelegate.
  • Registrazione dell'applicazione: registrare l'applicazione in Microsoft Entra ID e codificare in modo statico l'ID client nell'applicazione o nei file di configurazione.
  • Osservatore del profilo file: implementare una classe che eredita mip::FileProfile::Observer.

Caricare un profilo

Dopo aver definito ProfileObserver e ConsentDelegateImpl, è possibile creare un'istanza di mip::FileProfile. La creazione dell'oggetto mip::FileProfile richiede mip::MipContext e mip::FileProfile::Settings, che archivia tutte le informazioni sulle impostazioni relative a FileProfile.

Parametri di FileProfile::Settings

Il FileProfile::Settings costruttore accetta i cinque parametri seguenti:

  • std::shared_ptr<MipContext> mip::MipContext: oggetto inizializzato per archiviare le informazioni sull'applicazione, il percorso dello stato e così via.
  • mip::CacheStorageType: definisce come archiviare lo stato: in memoria, su disco o su disco e crittografato.
  • std::shared_ptr<mip::ConsentDelegate>: puntatore condiviso della classe mip::ConsentDelegate.
  • std::shared_ptr<mip::FileProfile::Observer> observer: puntatore condiviso all'implementazione del profilo Observer (in PolicyProfile, ProtectionProfilee FileProfile).

Negli esempi seguenti viene illustrato come creare l'oggetto usando l'archiviazione locale per l'archiviazione profileSettings dello stato o solo in memoria.

Archiviare lo stato solo in 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

Impostazioni del profilo di lettura/scrittura dal percorso di archiviazione su disco

Il frammento di codice seguente indica FileProfile a di archiviare tutti i dati sullo stato dell'app in ./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

Caricare il profilo

Dopo aver utilizzato uno dei precedenti approcci, utilizza il modello promise/future per caricare il FileProfile.

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

Se l'applicazione carica correttamente un profilo, ProfileObserver::OnLoadSuccessviene chiamata l'implementazione di mip::FileProfile::Observer::OnLoadSuccess. L’SDK passa alla funzione, come parametri, l'oggetto risultante o il puntatore all'eccezione, e il contesto. Il contesto è un puntatore all'oggetto std::promise creato per gestire l'operazione asincrona. La funzione imposta il valore della promise sull'oggetto FileProfile passato come primo parametro. Quando la funzione main usa Future.get(), può archiviare il risultato in un nuovo oggetto .

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

Mettere tutto insieme

Dopo aver implementato gli osservatori e il delegato di autenticazione, è possibile caricare completamente un profilo. Il frammento di codice seguente presuppone che tutte le intestazioni necessarie siano già incluse.

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

Il codice carica il profilo e lo archivia nell'oggetto denominato profile.

Passaggi successivi

Dopo aver aggiunto il profilo, il passaggio successivo consiste nell'aggiungere un motore al profilo.