Condividi tramite


Guida introduttiva alla ripubblicazione di File SDK (C++)

Panoramica

Per una panoramica su questo scenario e su dove può essere usato, vedere Ripubblicazione in MIP SDK.

Prerequisiti

Se non è già stato fatto, assicurarsi di completare i prerequisiti seguenti prima di continuare:

  • Completare l'avvio rapido: Impostare/ottenere le etichette di riservatezza (C++), che compila una soluzione visual Studio iniziale per elencare le etichette di riservatezza di un'organizzazione, per impostare e leggere le etichette di riservatezza da e verso un file. Questa guida introduttiva "How to - Downgrade/Remove a label that needs a justification C++" (Procedura - Downgrade/Rimozione di un'etichetta che richiede una giustificazione C++) si basa su quella precedente.
  • Facoltativamente: esaminare i gestori di file nei concetti di MIP SDK.
  • Facoltativamente: esaminare i gestori di protezione nei concetti di MIP SDK.

Aggiungere logica alla classe FileHandler Observer

Per poter usare Decrittografare un file protetto usando GetDecryptedTemporaryFileAsync() il metodo esposto da mip::FileHandler, i callback per il metodo asincrono per l'esito positivo e negativo devono essere definiti come indicato di seguito.

  1. Aprire la soluzione di Visual Studio creata nella precedente guida introduttiva: Impostare/ottenere etichette di riservatezza (C++).

  2. Usando Esplora soluzioni, aprire il filehandler_observer.h file per nel progetto. Verso la fine della definizione FileHandler, prima di }; aggiungere le righe seguenti per la dichiarazione del metodo.

        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. Usando Esplora soluzioni, aprire il filehandler_observer.cpp file nel progetto. Verso la fine del file, aggiungere le righe seguenti per le definizioni dei metodi.

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

Aggiungere la logica per modificare e ripubblicare un file protetto

  1. Usando Esplora soluzioni, aprire il file con estensione cpp nel progetto che contiene l'implementazione del main() metodo . Per impostazione predefinita, il nome del progetto che lo contiene è stato specificato durante la creazione del progetto.

  2. Verso la fine del corpo main(), sotto il sistema("pause"); e sopra restituisce 0; (in cui è stata interrotta la guida introduttiva precedente), inserire il codice seguente:

//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. Verso la fine di Main() trovare il blocco di arresto dell'applicazione creato nella guida introduttiva precedente e aggiungere le righe del gestore seguenti per rilasciare le risorse.

        protectedFileHandler = nullptr;
        protectionHandler = nullptr;
    
    
  2. Sostituire i valori segnaposto nel codice sorgente usando i valori seguenti:

    Segnaposto Valore
    <protected-file-path> File protetto dalla guida introduttiva precedente.
    <riprotezione-file-path> Percorso del file di output per il file modificato da ripubblicare.

Compilare e testare l'applicazione

Compilare e testare l'applicazione client.

  1. Usare CTRL-MAIUSC-B (Compila soluzione) per compilare l'applicazione client. Se non sono presenti errori di compilazione, usare F5 (Avvia debug) per eseguire l'applicazione.

  2. Se il progetto viene compilato ed eseguito correttamente, l'applicazione richiede un token di accesso, ogni volta che l'SDK chiama il AcquireOAuth2Token() metodo. Come in precedenza nella guida introduttiva "Imposta/ottieni etichetta di riservatezza", eseguire lo script di PowerShell per acquisire ogni volta il token, usando i valori forniti per $authority e $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 . . .