Sdílet prostřednictvím


Rychlý start k opětovnému publikování sady File SDK (C++)

Přehled

Přehled tohoto scénáře a jeho použití najdete v tématu Opětovné publikování v sadě MIP SDK.

Předpoklady

Pokud jste to ještě neudělali, nezapomeňte před pokračováním dokončit následující požadavky:

  • Úplný rychlý start: Nejprve nastavte nebo získejte popisky citlivosti (C++), které sestaví počáteční řešení sady Visual Studio a zobrazí seznam popisků citlivosti organizace a nastaví a přečte popisky citlivosti ze souboru. Tento rychlý start "How to - Downgrade/Remove a label that needs a justification C++" (Postup – Downgrade/Remove a label, který potřebuje odůvodnění jazyka C++), vychází z předchozího.
  • Volitelně: Zkontrolujte obslužné rutiny souborů v konceptech sady MIP SDK.
  • Volitelně: Zkontrolujte obslužné rutiny ochrany v konceptech sady MIP SDK.

Přidání logiky do třídy Pozorovatel obslužné rutiny FileHandler

Aby bylo možné použít dešifrování chráněného souboru pomocí GetDecryptedTemporaryFileAsync() metody vystavené mip::FileHandlermetodou , musí být zpětná volání asynchronní metody pro úspěch a selhání definována jako níže.

  1. Otevřete řešení sady Visual Studio, které jste vytvořili v předchozím rychlém startu: Nastavení nebo získání popisků citlivosti (C++).

  2. Pomocí Průzkumník řešení otevřete filehandler_observer.h soubor pro projekt. Před přidáním následujících řádků pro deklaraci metody na konec definice }; FileHandler.

        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. Pomocí Průzkumník řešení otevřete filehandler_observer.cpp soubor v projektu. Na konec souboru přidejte následující řádky pro definice metody.

    
        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);
        }
    

Přidání logiky pro úpravy a opětovné publikování chráněného souboru

  1. Pomocí Průzkumník řešení otevřete soubor .cpp v projektu, který obsahuje implementaci main() metody. Ve výchozím nastavení se použije stejný název jako projekt, který obsahuje, který jste zadali při vytváření projektu.

  2. Směrem ke konci hlavního () těla pod systémem("pause"); a výše vrácených 0; (kde jste skončili v předchozím rychlém startu), vložte následující kód:

//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. Na konci main() najděte blok vypnutí aplikace vytvořený v předchozím rychlém startu a přidejte následující řádky obslužné rutiny pro uvolnění prostředků.

        protectedFileHandler = nullptr;
        protectionHandler = nullptr;
    
    
  2. Zástupné hodnoty ve zdrojovém kódu nahraďte následujícími hodnotami:

    Zástupný symbol Hodnota
    <protected-file-path> Chráněný soubor z předchozího rychlého startu
    <reprotected-file-path> Cesta k výstupnímu souboru pro upravený soubor, který se má znovu publikovat.

Sestavení a otestování aplikace

Sestavte a otestujte klientskou aplikaci.

  1. K sestavení klientské aplikace použijte kombinaci kláves CTRL-SHIFT-B (řešení sestavení). Pokud nemáte žádné chyby sestavení, spusťte aplikaci pomocí klávesy F5 (spustit ladění).

  2. Pokud se projekt sestaví a úspěšně spustí, aplikace vyzve k zadání přístupového tokenu pokaždé, když sada SDK volá vaši AcquireOAuth2Token() metodu. Stejně jako dříve v rychlém startu Set/get Sensitivity Label (Nastavit/získat popisek citlivosti) spusťte skript PowerShellu, abyste získali token pokaždé pomocí hodnot zadaných pro $authority a $resourceUrl.

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