Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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: Tetapkan/dapatkan label sensitivitas (C++) terlebih dahulu, yang membangun solusi awal Visual Studio, untuk mencantumkan label sensitivitas milik organisasi, serta untuk menetapkan dan membaca label sensitivitas ke/dari sebuah file. Panduan Mulai Cepat "Cara - Menurunkan/Menghapus label yang memerlukan alasan C++" ini melanjutkan dari panduan sebelumnya.
- Secara opsional: Tinjau Penangan file dalam konsep MIP SDK.
- Opsional: Tinjau Penanganan perlindungan dalam konsep MIP SDK.
Menambahkan logika ke kelas Pengamat FileHandler
Untuk dapat menggunakan metode mendekripsi file yang dilindungi dengan menggunakan GetDecryptedTemporaryFileAsync() yang diekspos oleh mip::FileHandler, panggilan balik untuk metode asinkron agar berhasil dan gagal harus didefinisikan seperti ini.
Buka solusi Visual Studio yang Anda buat di "Mulai Cepat: Atur/dapatkan label sensitivitas (C++) sebelumnya.
Gunakan Penjelajah Solusi, buka file
filehandler_observer.hdalam 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;Menggunakan Penjelajah Solusi, buka
filehandler_observer.cppfile 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
Menggunakan Penjelajah Solusi, buka file .cpp dalam proyek Anda yang berisi implementasi
main()metode . Ini menggunakan nama default yang sama dengan proyek yang memuatnya, yang Anda tentukan selama pembuatan proyek.Menuju akhir isi main(), di bawah system("pause"); dan di atas return 0; (tempat Anda berhenti sebelumnya pada Quickstart), 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;
}
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;Ganti nilai tempat penampung dalam kode sumber menggunakan nilai berikut:
Pengganti sementara Nilai <jalur-berkas-terlindungi> File yang dilindungi dari panduan cepat sebelumnya. <jalur file yang dilindungi ulang> Jalur file output untuk file yang dimodifikasi untuk diterbitkan ulang.
Membangun dan menguji aplikasi
Buat dan uji aplikasi klien Anda.
Gunakan CTRL-SHIFT-B (Build Solution) untuk membangun aplikasi klien Anda. Jika tidak ada kesalahan build, gunakan F5 (Mulai debugging) untuk menjalankan aplikasi Anda.
Jika proyek Anda berhasil membangun dan berjalan, aplikasi meminta token akses, setiap kali SDK memanggil metode Anda
AcquireOAuth2Token(). Seperti yang telah Anda lakukan sebelumnya di Panduan Cepat "Mengatur/Mendapatkan Sensitivity Label", jalankan skrip PowerShell Anda untuk mendapatkan 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.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 . . .