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 Details finden Sie im Microsoft Information Protection (MIP) SDK für C++: 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.
Öffnen Sie die Visual Studio-Projektmappe, die Sie im vorherigen Schnellstart: Festlegen/Abrufen von Vertraulichkeitsbezeichnungen (C++) erstellt haben.
Ö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.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;
Ä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.Fügen Sie am Ende des Methodenkörpers von
main()
, zwischensystem("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");
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.
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.
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.