Guide de démarrage rapide pour la republication du SDK de fichiers (C++)

Aperçu

Pour obtenir une vue d’ensemble de ce scénario et où vous pouvez l’utiliser, consultez Republier dans le Kit de développement logiciel (SDK) MIP.

Conditions préalables

Si ce n’est déjà fait, veillez à remplir les conditions préalables suivantes avant de continuer :

  • Démarrage rapide : Définir et obtenir des étiquettes de confidentialité (C++) Suivez d’abord ce guide de démarrage rapide. Il crée une solution de démarrage Visual Studio qui répertorie les étiquettes de confidentialité d'une organisation et définit et lit des étiquettes de confidentialité sur un fichier. Ce guide de démarrage rapide « Comment - Rétrograder/Supprimer une étiquette qui a besoin d’une justification C++ » s’appuie sur le précédent.
  • Si vous le souhaitez , passez en revue les gestionnaires de fichiers dans les concepts du Kit de développement logiciel (SDK) MIP.
  • Facultatif : passez en revue les Gestionnaires de protection dans les concepts du SDK MIP.

Ajouter une logique à la classe d’observateur FileHandler

Pour déchiffrer un fichier protégé, appelez la GetDecryptedTemporaryFileAsync() méthode exposée par mip::FileHandler. Définissez les rappels de réussite et d’échec pour la méthode asynchrone, comme illustré dans l’exemple suivant.

  1. Ouvrez la solution Visual Studio que vous avez créée dans l’article précédent « Démarrage rapide : Définir et obtenir des étiquettes de confidentialité (C++) ».

  2. Dans Explorateur de solutions, ouvrez le filehandler_observer.h fichier dans votre projet. Vers la fin de la définition FileHandler, avant };, ajoutez les lignes suivantes pour les déclarations de méthode.

        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. Dans Explorateur de solutions, ouvrez le filehandler_observer.cpp fichier dans votre projet. Vers la fin du fichier, ajoutez les lignes suivantes pour les définitions de méthode.

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

Ajouter une logique pour modifier et republier un fichier protégé

  1. Dans Explorateur de solutions, ouvrez le fichier .cpp dans votre projet qui contient l’implémentation de la main() méthode. Il a par défaut le même nom que le projet qui le contient, que vous avez spécifié lors de la création du projet.

  2. Vers la fin de l’élément main(), après system("pause"); et avant return 0;, à l’endroit où vous vous êtes arrêté dans le guide de démarrage rapide précédent, insérez le code suivant :

//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. Vers la fin de main(), recherchez le bloc d’arrêt de l’application créé dans le guide de démarrage rapide précédent et ajoutez les lignes suivantes du gestionnaire afin de libérer les ressources.

        protectedFileHandler = nullptr;
        protectionHandler = nullptr;
    
    
  2. Remplacez les valeurs de remplacement dans le code source en utilisant les valeurs suivantes :

    Espace réservé Valeur
    <chemin-fichier-protégé> Le fichier protégé du guide de démarrage rapide précédent.
    <reprotected-file-path> Chemin d’accès au fichier de sortie du fichier modifié à republier.

Concevoir et tester l’application

Générez et testez votre application cliente.

  1. Utilisez ctrl-SHIFT-B (générer la solution) pour générer votre application cliente. Si la build n’a aucune erreur, utilisez F5 (Démarrer le débogage) pour exécuter votre application.

  2. Si votre projet génère et s’exécute correctement, l’application invite à entrer un jeton d’accès chaque fois que le SDK appelle votre AcquireOAuth2Token() méthode. Comme vous l’avez fait précédemment dans le guide de démarrage rapide « Définir et obtenir une étiquette de confidentialité », exécutez votre script PowerShell pour obtenir le jeton à chaque fois à l’aide des valeurs fournies pour $authority et $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.microsoftonline.com/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 . . .

Étapes suivantes