Share via


MIP File SDK: Rechtfertigung für das Senken der Vertraulichkeitsbezeichnung einer Datei (C++)

In diesem Schnellstart wird das Herabstufen einer Bezeichnung behandelt, wenn die Bezeichnungsrichtlinie eine Rechtfertigung erfordert. Sie verwenden dabei die mip::FileHandler-Klasse zum Ändern der Bezeichnungen einer Datei. Weitere Informationen finden Sie in der API-Referenz.

Voraussetzungen

Stellen Sie vor dem Fortfahren sicher, dass die folgenden Voraussetzungen erfüllt sind:

  • Schließen Sie zuerst den Schnellstart: Festlegen/Abrufen von Vertraulichkeitsbezeichnungen (C++) ab, in dem in Visual Studio eine Startprojektmappe zum Auflisten der Vertraulichkeitsbezeichnungen einer Organisation und zum Festlegen und Lesen von Vertraulichkeitsbezeichnungen in einer Datei erstellt wird. Dieser Schnellstart „Herabstufen/Entfernen einer Bezeichnung, die eine Rechtfertigung erfordert (C++)“ baut auf dem vorherigen auf.
  • Lesen Sie optional die Konzepte zu Dateihandlern im MIP SDK.

Hinzufügen von Logik zum Festlegen einer niedrigeren Bezeichnung für eine geschützte Datei

Fügen Sie Logik zum Festlegen einer Vertraulichkeitsbezeichnung für eine Datei mithilfe des mip::FileHandler-Objekts hinzu.

  1. Öffnen Sie die Visual Studio-Projektmappe, die Sie im vorherigen Schnellstart: Festlegen/Abrufen von Vertraulichkeitsbezeichnungen (C++) erstellt haben.

  2. Öffnen Sie mithilfe des Projektmappen-Explorers die CPP-Datei im Projekt, die die Implementierung der main()-Methode enthält. Standardmäßig weist sie denselben Namen wie das Projekt auf, in dem sie enthalten ist. Diesen Namen haben Sie bei der Projekterstellung angegeben.

  3. Fügen Sie die folgenden #include- und using-Anweisungen unter den entsprechenden vorhandenen Anweisungen am Anfang der Datei hinzu:

    
        #include "mip/file/file_error.h"
    
        using mip::JustificationRequiredError;
        using std::cin;
    
    
  4. Ändern Sie den <label-id>-Wert aus dem vorherigen Schnellstart in eine Vertraulichkeitsbezeichnung, für die zum Herabstufen eine Rechtfertigung erforderlich ist. Sie legen diese Bezeichnung in diesem Schnellstart zuerst fest und versuchen dann in weiteren Schritten, sie über Codeausschnitte herabzustufen.

  5. Fügen Sie am Ende des Methodenkörpers von main(), zwischen system("pause"); und dem Block zum Herunterfahren (an der Stelle, an der Sie im vorherigen Schnellstart aufgehört haben) den folgenden Code ein:


// Downgrade label
// Set paths and lower label ID
// Set a new label on input file.

string lowerlabelId = "<lower-label-id>";
cout << "\nApplying new Label ID " << lowerlabelId << " to " << filePathOut << endl;
mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED);

// Try to apply a label with lower sensitivity.
try
{
    handler->SetLabel(engine->GetLabelById(lowerlabelId), labelingOptions, mip::ProtectionSettings());
}

catch (const mip::JustificationRequiredError& e)
{
    // Request justification from user.
    cout<<"Please provide justification for downgrading a label: "<<endl;
    string justification;
    cin >> justification;

    // Set Justification provided flag
    bool isDowngradeJustified = true;
    mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED);
    labelingOptions.SetDowngradeJustification(isDowngradeJustified,justification);

    //Set new label.
    handler->SetLabel(engine->GetLabelById(lowerlabelId), labelingOptions, mip::ProtectionSettings());
}

catch (const std::exception& e)
{
    cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n";
    system("pause");
    return 1;
}

// Commit changes, save as a different output file
string lowerFilePathOut = "<lower-output-file-path>";
try
{
    cout << "Committing changes" << endl;
    auto commitPromise = std::make_shared<std::promise<bool>>();
    auto commitFuture = commitPromise->get_future();
    handler->CommitAsync(lowerFilePathOut, commitPromise);
    if (commitFuture.get()) {
        cout << "\nLabel committed to file: " << lowerFilePathOut << endl;
    }
    else {
        cout << "Failed to label: " + lowerFilePathOut << endl;
        return 1;
    }
}
catch (const std::exception& e)
{
    cout << "An exception occurred... did you specify a valid commit file path?\n\n" << e.what() << "'\n";
    system("pause");
    return 1;
}
system("pause");

// Set up async FileHandler for output file operations
string lowerActualFilePath = "<lower-content-identifier>";
try
{
    auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>();
    auto handlerFuture = handlerPromise->get_future();
    engine->CreateFileHandlerAsync(
        lowerFilePathOut,
        lowerActualFilePath,
        true,
        std::make_shared<FileHandlerObserver>(),
        handlerPromise);

    handler = handlerFuture.get();
}
catch (const std::exception& e)
{
    cout << "An exception occurred... did you specify a valid output file path?\n\n" << e.what() << "'\n";
    system("pause");
    return 1;
}

// Get the lowered label from output file
try
{
    cout << "\nGetting the label committed to file: " << lowerFilePathOut << endl;
    auto lowerLabel = handler->GetLabel();
    cout << "Name: " + lowerLabel->GetLabel()->GetName() << endl;
    cout << "Id: " + lowerLabel->GetLabel()->GetId() << endl;
}
catch (const std::exception& e)
{
    cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n";
    system("pause");
    return 1;
}
system("pause");

  1. Ersetzen Sie die Platzhalterwerte im Quellcode durch die folgenden Werte:

    Platzhalter Wert
    <lower-label-id> Eine Bezeichnungs-ID, die aus der Konsolenausgabe im vorherigen Schnellstart kopiert wird, z. B. bb7ed207-046a-4caf-9826-647cff56b990. Stellen Sie sicher, dass sie eine niedrigere Vertraulichkeit als die zuvor geschützte Dateibezeichnung hat.
    <lower-output-file-path> Der Ausgabedateipfad, unter dem die geänderte Datei gespeichert werden soll.
    <lower-content-identifier> Ein lesbarer Inhaltsbezeichner.

Erstellen und Testen der Anwendung

Erstellen und testen Sie die Clientanwendung.

  1. Drücken Sie STRG+UMSCHALT+B (Projektmappe erstellen), um Ihre Clientanwendung zu erstellen. Wenn keine Buildfehler auftreten, verwenden Sie F5 (Debuggen starten), um die Anwendung auszuführen.

  2. Wenn das Projekt erfolgreich erstellt und ausgeführt wird, fragt die Anwendung jedes Mal nach einem Zugriffstoken, wenn das SDK Ihre AcquireOAuth2Token()-Methode aufruft.

  Non-Business : 87ba5c36-17cf-14793-bbc2-bd5b3a9f95cz
  Public : 83867195-f2b8-2ac2-b0b6-6bb73cb33afz
  General : f42a3342-8706-4288-bd31-ebb85995028z
  Confidential : 074e457c-5848-4542-9a6f-34a182080e7z
  Highly Confidential : f55c2dea-db0f-47cd-8520-a52e1590fb6z
  Press any key to continue . . .

  Applying Label ID f55c2dea-db0f-47cd-8520-a52e1590fb6z to c:\Test\Test.docx
  Committing changes


  Label committed to file: c:\Test\Test.docx
  Press any key to continue . . .

  Run the PowerShell script to generate an access token using the following values, then copy/paste it below:
  Set $authority to: https://login.windows.net/37f4583d-9985-4e7f-a1ab-71afd8b55ba0
  Set $resourceUrl to: https://aadrm.com
  Sign in with user account: user1@tenant.onmicrosoft.com
  Enter access token: <paste-access-token-here>
  Press any key to continue . . .

  Getting the label committed to file: c:\Test\Test_labeled.docx
  Name: Highly Confidential
  Id: f55c2dea-db0f-47cd-8520-a52e1590fb6z
  Press any key to continue . . . 

  Applying new Label ID f42a3342-8706-4288-bd31-ebb85995028z to c:\Test\Test_labeled.docx
  Please provide justification for downgrading a label:
  Need for sharing with wider audience.
  Committing changes

  Label committed to file: c:\Test\Test_downgraded.docx
  Press any key to continue . . .

  Getting the label committed to file: c:\Test\Test_downgraded.docx
  Name: General
  Id: f42a3342-8706-4288-bd31-ebb85995028z
  Press any key to continue . . .

Beachten Sie, dass für den Fall, dass die Bezeichnung aus einer Datei gelöscht wird, eine Rechtfertigung entsprechend der Bezeichnungsrichtlinie erforderlich ist. Ein ähnlicher Ansatz sollte auch für den DeleteLabel()-Vorgang verwendet werden. Die DeleteLabel()-Funktion löst eine mip::JustificationRequiredError-Ausnahme aus. Das Flag isDowngradeJustified sollte in der Ausnahmebehandlung auf TRUE festgelegt werden, bevor die Bezeichnung erfolgreich gelöscht wird.