Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Überblick
Eine Übersicht zu diesem Szenario und wo sie verwendet werden kann, finden Sie unter "Erneutes Veröffentlichen" im MIP SDK.
Voraussetzungen
Falls noch nicht geschehen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen, bevor Sie fortfahren:
- Vollständige Schnellstartanleitung: Zuerst Vertraulichkeitsbezeichnungen (C++) festlegen/abrufen , die eine Startlösung von Visual Studio erstellt, um die Vertraulichkeitsbezeichnungen einer Organisation auflisten zu können, um Vertraulichkeitsbezeichnungen auf/aus einer Datei festzulegen und zu lesen. Dieser Schnellstart „Herabstufen/Entfernen einer Bezeichnung, die eine Rechtfertigung erfordert (C++)“ baut auf dem vorherigen auf.
- Optional: Überprüfen von Dateihandlern in den MIP SDK-Konzepten.
- Optional: Überprüfen von Schutzhandlern in den MIP SDK-Konzepten.
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-Lösung, die Sie in der vorherigen Schnellstartanleitung erstellt haben: Festlegen/Abrufen von Vertraulichkeitsbezeichnungen(C++).
Öffnen Sie im Projektmappen-Explorer die Datei
filehandler_observer.hin Ihrem Projekt. Fügen Sie am Ende der FileHandler-Definition, bevor};, die folgenden 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 die Datei
filehandler_observer.cppim Projekt mithilfe des Projektmappen-Explorers. Fügen Sie am Ende der Datei die folgenden 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 einer Logik zum Bearbeiten und Erneuten Veröffentlichen einer geschützten Datei
Öffnen Sie im Projektmappen-Explorer die .cpp Datei in Ihrem Projekt, die die Implementierung der
main()Methode enthält. Standardmäßig wird derselbe Name wie das Projekt verwendet, das es enthält, das Sie während der Projekterstellung angegeben haben.Am Ende der main()-Funktion, unterhalb von system("pause") und oberhalb von return 0; (wo Sie in der vorherigen Schnellstartanleitung aufgehört haben), fügen Sie 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;
}
Am Ende von Main() finden Sie den Anwendungsschließblock, der im vorherigen Schnellstart erstellt wurde, und fügen Sie die folgenden 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 vorherigem 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 Ihre Clientanwendung.
Verwenden Sie STRG-SHIFT-B (Lösung erstellen), um Ihre Clientanwendung zu erstellen. Wenn keine Buildfehler auftreten, verwenden Sie F5 (Debuggen starten), um Ihre Anwendung auszuführen.
Wenn Ihr Projekt erfolgreich erstellt und ausgeführt wird, fordert die Anwendung jedes Mal, wenn das SDK Ihre
AcquireOAuth2Token()Methode aufruft, ein Zugriffstoken ein. Führen Sie, wie in der Kurzanleitung "Sensitivitätslabel festlegen/abrufen", Ihr PowerShell-Skript aus, um jedes Mal das Token zu erwerben, wobei die bereitgestellten Werte für $authority und $resourceUrl verwendet werden.
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 . . .