Share via


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.

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

  2. Ö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;
    
  3. Ö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

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

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

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