Condividi tramite


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 una delle funzionalità di File SDK, è necessario creare un oggetto FileProfile e tutte le operazioni future verranno eseguite dal profilo o da altri oggetti aggiunti al profilo.

Prima di tentare di creare un'istanza di un profilo, è necessario soddisfare alcuni prerequisiti del codice:

  • MipContext è stato creato e archiviato in un oggetto accessibile all'oggetto mip::FileProfile .
  • ConsentDelegateImpl implementa mip::ConsentDelegate.
  • L'applicazione è stata registrata in Microsoft Entra ID e l'ID client è stato codificato staticamente nell'applicazione o nei file di configurazione.
  • Una classe che eredita mip::FileProfile::Observer è stata implementata correttamente.

Caricare un profilo

Con ProfileObserver e ConsentDelegateImpl definiti, mip::FileProfile può ora essere istanziata. La creazione dell'oggetto mip::FileProfile richiede [mip::MipContext] di avere e mip::FileProfile::Settings archiviare tutte le informazioni sulle impostazioni relative a FileProfile.

Parametri FileProfile::Settings

Il FileProfile::Settings costruttore accetta cinque parametri, elencati di seguito:

  • 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 profileSettings usando l'archiviazione locale per l'archiviazione dello stato, nonché 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 seguente frammento di codice istruirà FileProfile ad 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

Utilizzando uno dei due approcci sopra descritti, applica ora il modello promise/future per caricare FileProfile.

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

Se è stato caricato un profilo e tale operazione ha avuto esito positivo, ProfileObserver::OnLoadSuccess viene chiamata la nostra implementazione di mip::FileProfile::Observer::OnLoadSuccess. L'oggetto risultante o il puntatore ad eccezione, nonché il contesto, vengono passati come parametri alla funzione. Il contesto è un puntatore all'oggetto std::promise che abbiamo creato per gestire l'operazione asincrona. La funzione imposta semplicemente il valore della promessa sull'oggetto FileProfile passato per il primo parametro. Quando la funzione main usa Future.get(), il risultato può essere archiviato in un nuovo oggetto .

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

Mettendo insieme

Dopo aver implementato completamente gli osservatori e il delegato di autenticazione, è ora possibile caricare completamente un profilo. Il frammento di codice seguente suppone 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 risultato finale è che il profilo è stato caricato correttamente e archiviato nell'oggetto denominato profile.

Passaggi successivi

Ora che il profilo è stato aggiunto, il passaggio successivo consiste nell'aggiungere un motore al profilo.