Freigeben über


File SDK-Schnellstart: Erneutes Veröffentlichen (C++)

Ü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.

  1. Öffnen Sie die Visual Studio-Lösung, die Sie in der vorherigen Schnellstartanleitung erstellt haben: Festlegen/Abrufen von Vertraulichkeitsbezeichnungen(C++).

  2. Öffnen Sie im Projektmappen-Explorer die Datei filehandler_observer.h in 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;
    
  3. Öffnen Sie die Datei filehandler_observer.cpp im 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

  1. Ö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.

  2. 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;
}
  1. 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;
    
    
  2. 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.

  1. 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.

  2. 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 . . .