Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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'oggettomip::FileProfile
. -
ConsentDelegateImpl
implementamip::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 classemip::ConsentDelegate
. -
std::shared_ptr<mip::FileProfile::Observer> observer
: puntatore condiviso all'implementazione del profiloObserver
(inPolicyProfile
,ProtectionProfile
eFileProfile
).
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.