File SDK-Schnellstart: Erneutes Veröffentlichen (C++)
Überblick
Eine Übersicht über dieses Szenario und wo es verwendet werden kann, finden Sie unter Erneutes Veröffentlichen im MIP SDK.
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.
- Lesen Sie optional die Konzepte zu Schutzhandlern im MIP SDK.
Hinzufügen von Logik zur FileHandler-Observer-Klasse
Um eine geschützte Datei mithilfe der von mip::FileHandler
verfügbar gemachten GetDecryptedTemporaryFileAsync()
-Methode entschlüsseln zu können, müssen wie unten beschrieben Rückrufe für die asynchrone Methode für Erfolg und Fehler definiert werden.
Öffnen Sie die Visual Studio-Projektmappe, die Sie im vorherigen „Schnellstart: Festlegen/Abrufen von Vertraulichkeitsbezeichnungen (C++)“ erstellt haben.
Öffnen Sie im Projektmappen-Explorer die Datei
filehandler_observer.h
in Ihrem Projekt. Fügen Sie am Ende der FileHandler-Definition vor};
die unten stehenden Zeilen für die Methodendeklaration hinzu.void OnGetDecryptedTemporaryFileSuccess(const std::string& decryptedFilePath, const std::shared_ptr<void>& context) override; void OnGetDecryptedTemporaryFileFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) override;
Öffnen Sie im Projektmappen-Explorer die Datei
filehandler_observer.cpp
in Ihrem Projekt. Fügen Sie am Ende der Datei die unten stehenden Zeilen für Methodendefinitionen hinzu.void FileHandlerObserver::OnGetDecryptedTemporaryFileSuccess(const std::string& decryptedFilePath, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<std::string>>(context); promise->set_value(decryptedFilePath); } void FileHandlerObserver::OnGetDecryptedTemporaryFileFailure(const std::exception_ptr& error, const std::shared_ptr<void>& context) { auto promise = std::static_pointer_cast<std::promise<std::string>>(context); promise->set_exception(error); }
Hinzufügen von Logik zum Bearbeiten und Wiederveröffentlichen einer geschützten Datei
Ö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 am Ende des Methodenkörpers von main(), zwischen system("pause"); und return 0; (an der Stelle, an der Sie im vorherigen Schnellstart aufgehört haben) den folgenden Code ein:
//Originally protected file's path.
std::string protectedFilePath = "<protected-file-path>";
// Create file handler for the file
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>();
auto handlerFuture = handlerPromise->get_future();
engine->CreateFileHandlerAsync(protectedFilePath,
protectedFilePath,
true,
std::make_shared<FileHandlerObserver>(),
handlerPromise);
auto protectedFileHandler = handlerFuture.get();
// retieve and store protection handler from file
auto protectionHandler = protectedFileHandler->GetProtection();
//Check if the user has the 'Edit' right to the file and if so decrypt the file.
if (protectionHandler->AccessCheck("Edit")) {
// Decrypt file to temp path using the same file handler
auto tempPromise = std::make_shared<std::promise<string>>();
auto tempFuture = tempPromise->get_future();
protectedFileHandler->GetDecryptedTemporaryFileAsync(tempPromise);
auto tempPath = tempFuture.get();
/// Write code here to perform further operations for edit ///
/// Follow steps below for re-protecting the edited file ///
// Create a new file handler using the temporary file path.
auto reprotectPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>();
auto reprotectFuture = reprotectPromise->get_future();
engine->CreateFileHandlerAsync(tempPath,
tempPath,
true,
std::make_shared<FileHandlerObserver>(),
reprotectPromise);
auto republishHandler = reprotectFuture.get();
// Set protection using the ProtectionHandler from the original consumption operation.
republishHandler->SetProtection(protectionHandler);
std::string reprotectedFilePath = "<protected-file-path>";
// Commit changes
auto republishPromise = std::make_shared<std::promise<bool>>();
auto republishFuture = republishPromise->get_future();
republishHandler->CommitAsync(reprotectedFilePath, republishPromise);
// Validate republishing
cout << "Protected File: " + protectedFilePath<<endl;
cout << "Protected Label ID: " + protectedFileHandler->GetLabel()->GetLabel()->GetId() << endl;
cout << "Protection Owner: " + protectedFileHandler->GetProtection()->GetOwner() << endl<<endl;
cout << "Republished File: " + reprotectedFilePath<<endl;
cout << "Republished Label ID: " + republishHandler->GetLabel()->GetLabel()->GetId() << endl;
cout << "Republished Owner: " + republishHandler->GetProtection()->GetOwner() << endl;
}
Suchen Sie am Ende von Main() den im vorherigen Schnellstart erstellten Block zum Herunterfahren der Anwendung, und fügen Sie darunter Handlerzeilen hinzu, um Ressourcen freizugeben.
protectedFileHandler = nullptr; protectionHandler = nullptr;
Ersetzen Sie die Platzhalterwerte im Quellcode durch die folgenden Werte:
Platzhalter Wert <protected-file-path> Geschützte Datei aus dem vorherigen Schnellstart <reprotected-file-path> Der Ausgabedateipfad für die geänderte Datei zum erneuten Veröffentlichen
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. Führen Sie das PowerShell-Skript wie zuvor im Schnellstart „Festlegen/Abrufen von Vertraulichkeitsbezeichnungen“ aus, um jedes Mal das Token anhand der angegebenen Werte für $authority und $resourceUrl abzurufen.
Sensitivity labels for your organization:
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 074e457c-5848-4542-9a6f-34a182080e7z to C:\Test\Test.docx
Committing changes
Label committed to file: C:\Test\Test_labeled.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: Confidential
Id: 074e457c-5848-4542-9a6f-34a182080e7z
Press any key to continue . . .
Protected File: C:\Test\Test_labeled.docx
Protected Label ID: 074e457c-5848-4542-9a6f-34a182080e7z
Protection Owner: user1@tenant.onmicrosoft.com
Republished File: c:\Test\Test_republished.docx
Republished Label ID: 074e457c-5848-4542-9a6f-34a182080e7z
Republished Owner: user1@tenant.onmicrosoft.com
Press any key to close this window . . .