Microsoft Information Protection SDK - Concepten van file-SDK-engine

De mip::FileEngine in de MIP File SDK biedt een interface voor alle bewerkingen die namens een opgegeven identiteit worden uitgevoerd. Er wordt één engine toegevoegd voor elke gebruiker die zich aanmeldt bij de toepassing en alle bewerkingen die de engine uitvoert, worden uitgevoerd in de context van die identiteit.

Het FileEngine heeft twee primaire verantwoordelijkheden: labels voor een geverifieerde gebruiker en het maken van bestandshandlers voor het uitvoeren van bestandsbewerkingen namens de gebruiker.

  • mip::FileEngine
  • ListSensitivityLabels(): Haalt de lijst met labels voor de geladen engine op.
  • CreateFileHandler(): Hiermee maakt u een mip::FileHandler voor een specifiek bestand of een specifieke stream.

Een bestandsengine toevoegen

Zoals wordt behandeld in profiel- en engineobjecten, kan een engine twee statussen hebben, CREATED of LOADED. Als het niet een van deze twee statussen is, bestaat het niet. Als u zowel een status wilt maken als laden, hoeft u slechts één aanroep uit te voeren.FileProfile::LoadAsync Als de engine al in de cachestatus bestaat, is LOADEDdit . Als het niet bestaat, is CREATED het en LOADED. CREATED impliceert dat de toepassing alle informatie van de service bevat die nodig is om de engine te laden. LOADED impliceert dat alle gegevensstructuren die nodig zijn om de engine te gebruiken, in het geheugen zijn gemaakt.

Bestandsengine maken Instellingen

Net als bij een profiel vereist de engine ook een instellingenobject. mip::FileEngine::Settings Dit object slaat de unieke engine-id, de mip::AuthDelegate implementatie, aanpasbare clientgegevens op die kunnen worden gebruikt voor foutopsporing of telemetrie, en, optioneel, de landinstelling.

Hier maken we een FileEngine::Settings object met de naam engine Instellingen met behulp van de identiteit van de toepassingsgebruiker.

FileEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.
  authDelegateImpl,         // auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

Wanneer u een engine maakt Instellingen op deze manier, is het belangrijk om ook expliciet een unieke engineId in te stellen via:

engineSettings.SetEngineId(engineId);

Door de gebruikersnaam of e-mail te gebruiken, zorgt u ervoor dat dezelfde engine telkens wordt geladen wanneer de gebruiker de service of toepassing gebruikt.

Geldig is ook het verstrekken van een aangepaste engine-id:

FileEngine::Settings engineSettings(
  "myEngineId",     // string
  authDelegateImpl, // auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

Als best practice moet de eerste parameter, idiets zijn waarmee de engine eenvoudig kan worden verbonden met de bijbehorende gebruiker. Iets als e-mailadres, UPN of AAD-object-GUID zorgt ervoor dat de id zowel uniek is als kan worden geladen vanuit de lokale status zonder de service aan te roepen.

De bestandsengine toevoegen

Om de engine toe te voegen, gaan we terug naar het promise/future-patroon dat wordt gebruikt om het profiel te laden. In plaats van de belofte voor mip::FileProfilete maken, wordt deze gemaakt met behulp van mip::FileEngine.

  //auto profile will be std::shared_ptr<mip::FileProfile>
  auto profile = profileFuture.get();

  // Instantiate the AuthDelegate implementation.
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);

  //Create the FileEngine::Settings object
  FileEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  //Create a promise for std::shared_ptr<mip::FileEngine>
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::FileEngine>>>();

  //Instantiate the future from the promise
  auto engineFuture = enginePromise->get_future();

  //Add the engine using AddEngineAsync, passing in the engine settings and the promise
  profile->AddEngineAsync(engineSettings, enginePromise);

  //get the future value and store in std::shared_ptr<mip::FileEngine>
  auto engine = engineFuture.get();

Het eindresultaat van de bovenstaande code is dat de engine voor de geverifieerde gebruiker wordt toegevoegd aan het profiel.

Vertrouwelijkheidslabels vermelden

Met behulp van de toegevoegde engine is het nu mogelijk om alle vertrouwelijkheidslabels weer te geven die beschikbaar zijn voor de geverifieerde gebruiker door aan te roepen engine->ListSensitivityLabels().

ListSensitivityLabels() haalt de lijst met labels en kenmerken van deze labels op voor een specifieke gebruiker van de service. Het resultaat wordt opgeslagen in een vector van std::shared_ptr<mip::Label>.

Lees hier meer over mip::Label.

ListSensitivityLabels()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

Of vereenvoudigd:

auto labels = engine->ListSensitivityLabels();

Het afdrukken van de namen is een eenvoudige manier om aan te geven dat we beleid hebben opgehaald uit de service en de labels konden ophalen. Als u het label wilt toepassen, is de label-id vereist. De onderstaande code doorloopt alle labels, waarbij de name en de id voor elk bovenliggend en onderliggend label worden weergegeven.

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

De verzameling geretourneerde mip::LabelGetSensitivityLabels() items kan worden gebruikt om alle labels weer te geven die beschikbaar zijn voor de gebruiker. Wanneer deze optie is geselecteerd, gebruikt u de id om labels toe te passen op een bestand.

Volgende stappen

Nu het profiel is geladen, de engine is toegevoegd en we labels hebben, kunnen we een handler toevoegen om labels te lezen, schrijven of verwijderen uit bestanden. Zie bestandshandlers in de MIP SDK.