Bagikan melalui


Mulai Cepat Penerbitan Ulang SDK File (C++)

Gambaran Umum

Untuk gambaran umum tentang skenario ini dan di mana skenario tersebut dapat digunakan, lihat Menerbitkan ulang di MIP SDK.

Prasyarat

Jika Anda belum melakukannya, pastikan untuk menyelesaikan prasyarat berikut sebelum melanjutkan:

  • Selesaikan Mulai Cepat: Atur/dapatkan label sensitivitas (C++) terlebih dahulu, yang membangun solusi Visual Studio pemula, untuk mencantumkan label sensitivitas organisasi, untuk mengatur dan membaca label sensitivitas ke/dari file. Mulai Cepat "Cara - Menurunkan/Menghapus label yang memerlukan pembenaran C++" ini dibuat pada yang sebelumnya.
  • Secara opsional: Tinjau Penangan file dalam konsep MIP SDK.
  • Secara opsional: Tinjau Penangan perlindungan dalam konsep MIP SDK.

Menambahkan logika ke kelas Pengamat FileHandler

Untuk dapat menggunakan Dekripsi file yang dilindungi dengan menggunakan GetDecryptedTemporaryFileAsync() metode yang diekspos oleh mip::FileHandler, panggilan balik untuk metode asinkron untuk keberhasilan dan kegagalan harus didefinisikan seperti di bawah ini.

  1. Buka solusi Visual Studio yang Anda buat di "Mulai Cepat: Atur/dapatkan label sensitivitas (C++) sebelumnya.

  2. Menggunakan Penjelajah Solusi, buka filehandler_observer.h file untuk di proyek Anda. Menjelang akhir definisi FileHandler, sebelum }; menambahkan baris di bawah ini untuk deklarasi metode.

        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. Dengan menggunakan Penjelajah Solusi, buka filehandler_observer.cpp file di proyek Anda. Menjelang akhir file, tambahkan baris di bawah ini untuk definisi metode.

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

Menambahkan logika untuk mengedit dan menerbitkan ulang file yang dilindungi

  1. Dengan menggunakan Penjelajah Solusi, buka file .cpp dalam proyek Anda yang berisi implementasi main() metode . Ini default ke nama yang sama dengan proyek yang berisinya, yang Anda tentukan selama pembuatan proyek.

  2. Menuju akhir isi main(), di bawah sistem("jeda"); dan di atas mengembalikan 0; (di mana Anda tinggalkan di Mulai Cepat sebelumnya), sisipkan kode berikut:

//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. Menjelang akhir Main() temukan blok matikan aplikasi yang dibuat di mulai cepat sebelumnya dan tambahkan baris handler di bawah ini untuk merilis sumber daya.

        protectedFileHandler = nullptr;
        protectionHandler = nullptr;
    
    
  2. Ganti nilai tempat penampung dalam kode sumber menggunakan nilai berikut:

    Placeholder Nilai
    <protected-file-path> File yang dilindungi dari mulai cepat sebelumnya.
    <jalur file terlindungi ulang> Jalur file output untuk file yang dimodifikasi untuk diterbitkan ulang.

Membangun dan menguji aplikasi

Buat dan uji aplikasi klien Anda.

  1. Gunakan CTRL-SHIFT-B (Build Solution) untuk membangun aplikasi klien Anda. Jika Anda tidak memiliki kesalahan build, gunakan F5 (Mulai penelusuran kesalahan) untuk menjalankan aplikasi Anda.

  2. Jika proyek Anda berhasil membangun dan berjalan, aplikasi meminta token akses, setiap kali SDK memanggil metode Anda AcquireOAuth2Token() . Seperti yang Anda lakukan sebelumnya di Mulai Cepat "Set/get Sensitivity Label", jalankan skrip PowerShell Anda untuk memperoleh token setiap kali, menggunakan nilai yang disediakan untuk $authority dan $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 . . .