Microsoft Information Protection SDK - Konzepte der Policy SDK-Engine

mip::PolicyEngine implementiert alle Vorgänge, die das Richtlinien-SDK ausführen kann, mit Ausnahme des Ladens des Profils.

Implementierung: Hinzufügen eines Richtlinienmoduls

Implementierung: Richtlinien-Engine-Einstellungen erstellen

Ähnlich wie bei einem Profil erfordert die Engine auch ein Einstellungsobjekt, mip::PolicyEngine::Settings. Dieses Objekt speichert die eindeutige Engine-ID, ein Objekt Ihrer mip::AuthDelegate-Implementierung, anpassbare Clientdaten für Debugging oder Telemetrie und optional die Locale.

Im folgenden Beispiel wird ein PolicyEngine::Settings Objekt namens engineSettings mithilfe der Identität des Anwendungsbenutzers erstellt:

PolicyEngine::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.

Wenn Sie engineSettings auf diese Weise erstellen, legen Sie auch explizit eine eindeutige engineId fest:

engineSettings.SetEngineId(engineId);

Durch die Verwendung des Benutzernamens oder der E-Mail wird sichergestellt, dass dasselbe Modul jedes Mal geladen wird, wenn der Benutzer den Dienst oder die Anwendung verwendet.

Auch gültig ist die Bereitstellung einer benutzerdefinierten Modul-ID:

PolicyEngine::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.

Verwenden Sie als bewährte Vorgehensweise als ersten Parameter id, der die Engine mit dem zugehörigen Benutzer verbindet, vorzugsweise den User Principal Name (UPN).

Implementierung: Hinzufügen des Richtlinienmoduls

Um die Engine hinzuzufügen, greifen Sie wieder auf das Future/Promise-Muster zurück, das zum Laden des Profils verwendet wurde. Anstatt die Zusage für mip::Profile zu erstellen, verwenden Sie mip::PolicyEngine.


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

  // Create the delegate
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);


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

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

  // 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::PolicyEngine>.
  auto engine = engineFuture.get();

Der Code fügt dem Profil ein Modul für den authentifizierten Benutzer hinzu.

Implementierung: Vertraulichkeitsbezeichnungen auflisten

Mithilfe des hinzugefügten Moduls können Sie alle Vertraulichkeitsbezeichnungen auflisten, die dem authentifizierten Benutzer durch Aufrufen engine->ListSensitivityLabels()zur Verfügung stehen.

ListSensitivityLabels() Ruft die Liste der Bezeichnungen und Attribute dieser Bezeichnungen für einen bestimmten Benutzer aus dem Dienst ab. Das Ergebnis wird in einem Vektor von std::shared_ptr<mip::Label> gespeichert.

Implementierung: ListSensitivityLabels()

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

Implementierung: Drucken der Etiketten

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //print the label name
  cout << label->GetName() << endl;
  //Iterate through all child labels
  for (const auto& child : label->GetChildren()) {
    //Print the label with some formatting
    cout << "->  " << child->GetName() << endl;
  }
}

Das Drucken der Namen zeigt, dass die Anwendung die Richtlinie erfolgreich aus dem Dienst abgerufen und die Bezeichnungen erhalten hat. Um das Label anzuwenden, benötigen Sie die Labelkennung. Ändern Sie den vorherigen Codeausschnitt, um die Bezeichnungs-ID zurückzugeben:

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

Sie können die von ListSensitivityLabels() zurückgegebene Sammlung von mip::Label verwenden, um alle dem Benutzer zur Verfügung stehenden Bezeichnungen anzuzeigen und dann nach der Auswahl die ID zu verwenden, um Bezeichnungen auf eine Datei anzuwenden.

Nächste Schritte