Microsoft Information Protection SDK – begrepp för File SDK-motorn

I mip::FileEngine MIP-fil-SDK:t finns ett gränssnitt för alla åtgärder som utförs för en angiven identitet. En motor läggs till för varje användare som loggar in i programmet och alla åtgärder som motorn utför utförs i kontexten för den identiteten.

FileEngine har två primära ansvarsområden: att lista etiketter för en autentiserad användare och att skapa filhanterare för att utföra filåtgärder åt användaren.

  • mip::FileEngine
  • ListSensitivityLabels(): Hämtar listan över etiketter för den inlästa motorn.
  • CreateFileHandler(): Skapar en mip::FileHandler för en specifik fil eller dataström.

Lägga till en filmotor

Som beskrivs i profil- och motorobjekt kan en motor ha två tillstånd – CREATED eller LOADED. Om det inte är ett av dessa två tillstånd finns det inte. För att både skapa och läsa in ett tillstånd är det bara nödvändigt att göra ett enda anrop till FileProfile::LoadAsync. Om motorn redan finns i det cachade tillståndet kommer den att LOADED. Om den inte finns kommer det att vara CREATED och LOADED. CREATED innebär att applikationen har all information från tjänsten som behövs för att ladda motorn. LOADED innebär att alla datastrukturer som krävs för att utnyttja motorn har skapats i minnet.

Skapa inställningar för filmotorn

Precis som en profil kräver motorn också ett inställningsobjekt, mip::FileEngine::Settings. Det här objektet lagrar den unika motoridentifieraren, mip::AuthDelegate implementeringen, anpassningsbara klientdata som kan användas för felsökning eller telemetri och, om du vill, språkvarianten.

Här skapar vi ett FileEngine::Settings objekt som kallas engineSettings med hjälp av programanvändarens identitet.

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.

När du skapar engineSettings på det här sättet är det viktigt att också uttryckligen ange ett unikt engineId via:

engineSettings.SetEngineId(engineId);

Att använda användarnamnet eller e-postadressen bidrar till att säkerställa att samma motor laddas varje gång användaren använder tjänsten eller applikationen.

Giltigt är också att tillhandahålla ett anpassat motor-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.

Bästa praxis är att den första parametern, id, är något som gör att motorn enkelt kan anslutas till den associerade användaren. Något i stil med e-postadress, UPN eller AAD-objekt-GUID skulle säkerställa att ID:t både är unikt och kan läsas in från lokalt lagrat tillstånd utan att anropa tjänsten.

Lägg till File Engine

För att lägga till motorn går vi tillbaka till promise-/future-mönstret som användes för att läsa in profilen. I stället för att skapa löftet för mip::FileProfileskapas det med hjälp av 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();

Slutresultatet av koden ovan är att motorn för den autentiserade användaren läggs till i profilen.

Lista känslighetsetiketter

Med den tillagda motorn går det nu att lista alla känslighetsetiketter som är tillgängliga för den autentiserade användaren genom att anropa engine->ListSensitivityLabels().

ListSensitivityLabels() hämtar listan med etiketter och attribut för dessa etiketter för en specifik användare från tjänsten. Resultatet lagras i en vektor av std::shared_ptr<mip::Label>.

Läs mer här om mip::Label.

ListSensitivityLabels()

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

Eller förenklat:

auto labels = engine->ListSensitivityLabels();

Att skriva ut namnen är ett enkelt sätt att visa att vi lyckades hämta policyn från tjänsten och kunde hämta etiketterna. Om du vill använda etiketten krävs etikettidentifieraren. Koden nedan itererar över alla etiketter och visar name och id för varje överordnad och underordnad etikett.

//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;
  }
}

Samlingen av mip::Label som returneras av GetSensitivityLabels() kan användas för att visa alla etiketter som är tillgängliga för användaren och sedan, när en etikett väljs, använda ID:t för att tillämpa etiketter på en fil.

Nästa steg

Nu när profilen har lästs in, motorn har lagts till och vi har etiketter kan vi lägga till en hanterare för att börja läsa, skriva eller ta bort etiketter i filer. Se filhanteringsmoduler i MIP SDK:n.