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 è hardcoded nei file di applicazione o di configurazione.
  • Una classe che mip::FileProfile::Observer eredita è stata implementata in modo appropriato.

Caricare un profilo

ProfileObserverCon , e ConsentDelegateImpl, definito, mip::FileProfile può ora essere creata un'istanza. 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 usando l'archiviazione locale per l'archiviazione profileSettings stato e 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

L'snip FileProfile del codice seguente indica 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

Usando entrambi i dettagli dell'approccio precedenti, usare 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::OnLoadSuccessviene chiamata l'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 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();

Mettere insieme

Dopo aver implementato completamente gli osservatori e il delegato di autenticazione, è ora possibile caricare completamente un profilo. Lo snip del 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 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.