Dela via


Snabbstart för ompublicering av fil-SDK (C++)

Översikt

En översikt över det här scenariot och var det kan användas finns i Publicera om i MIP SDK.

Förutsättningar

Om du inte redan har gjort det måste du slutföra följande krav innan du fortsätter:

  • Complete Quickstart: Set/get sensitivity labels(C++) first, which builds a starter Visual Studio solution, to list an organization's sensitivity labels, to set and read sensitivity labels to/from a file. Den här översikten "Hur du nedgraderar/avlägsnar en etikett som kräver motivering i C++" bygger på den föregående.
  • Alternativt: Granska filhanterare i MIP SDK-begreppen.
  • Alternativt: Granska skyddshanterare i MIP SDK-begreppen.

Lägga till logik i klassen FileHandler Observer

För att kunna använda metoden Dekryptera en skyddad fil genom GetDecryptedTemporaryFileAsync(), som exponeras av mip::FileHandler, måste callbacks för den asynkrona metoden för lyckat och misslyckat resultat definieras enligt nedan.

  1. Öppna Visual Studio-lösningen som du skapade i föregående "Snabbstart: Ange/hämta känslighetsetiketter(C++).

  2. Använd Solution Explorer och öppna filehandler_observer.h filen för i projektet. Mot slutet av FileHandler-definitionen, innan };, lägg till raderna nedan för metoddeklaration.

        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. Använd Solution Explorer för att öppna filehandler_observer.cpp-filen i ditt projekt. Mot slutet av filen lägger du till rader nedan för metoddefinitioner.

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

Lägga till logik för att redigera och publicera om en skyddad fil

  1. Using Solution Explorer, open the .cpp file in your project that contains the implementation of the main() method. Det är som standard samma namn som det projekt som innehåller det, som du angav när projektet skapades.

  2. Mot slutet av main() brödtexten under system("paus"); och högre än retur 0. (där du slutade i föregående snabbstart) infogar du följande kod:

//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. Mot slutet av Main() hittar du det block för programavstängning som skapades i föregående snabbstart och lägger till nedanstående hanteringsrader för att frigöra resurser.

        protectedFileHandler = nullptr;
        protectionHandler = nullptr;
    
    
  2. Ersätt platshållarvärdena i källkoden med hjälp av följande värden:

    Platshållare Värde
    <skyddad-fil-sökväg> Skyddad fil från föregående snabbstart.
    <omskyddad-fil-sökväg> Sökvägen till utdatafilen för den modifierade filen som ska ompubliceras.

Skapa och testa programmet

Skapa och testa klientprogrammet.

  1. Använd CTRL-SHIFT-B (Build Solution) för att skapa klientprogrammet. Om du inte har några byggfel använder du F5 (Starta felsökning) för att köra programmet.

  2. Om projektet bygger och körs lyckosamt kommer programmet att begära en åtkomsttoken varje gång SDK:t anropar din AcquireOAuth2Token() metod. Precis som tidigare i snabbstarten "Ange/hämta känslighetsetikett" kör du PowerShell-skriptet för att hämta token varje gång med hjälp av värdena för $authority och $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 . . .