Microsoft Information Protection File SDK - Justifikasi Tindakan untuk menurunkan label sensitivitas pada file (C++)
Mulai cepat ini membahas penanganan operasi label downgrade saat kebijakan label memerlukan pembenaran. Di sini, kita akan menggunakan mip::FileHandler
kelas untuk mengubah label file. Untuk detail lebih lanjut, lihat referensi API.
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 dibangun pada yang sebelumnya.
- Secara opsional: Tinjau konsep penangan File dalam konsep MIP SDK.
Menambahkan logika untuk mengatur label yang lebih rendah ke file yang dilindungi
Tambahkan logika untuk mengatur label sensitivitas pada file, menggunakan mip::FileHandler
objek .
Buka solusi Visual Studio yang Anda buat di Mulai Cepat sebelumnya : Atur/dapatkan label sensitivitas (C++).
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.Tambahkan #include berikut dan gunakan arahan, di bawah arahan yang ada yang sesuai, di bagian atas file:
#include "mip/file/file_error.h" using mip::JustificationRequiredError; using std::cin;
<label-id>
Perbarui nilai dari mulai cepat sebelumnya ke label sensitivitas yang memerlukan pembenaran untuk menurunkan. Selama mulai cepat ini berjalan, kita akan mengatur label ini terlebih dahulu dan kemudian mencoba menurunkannya melalui cuplikan kode dalam langkah-langkah lebih lanjut.Menjelang akhir
main()
isi, di bawahsystem("pause");
dan di atas blok matikan (di mana Anda meninggalkan di Mulai Cepat sebelumnya), sisipkan kode berikut:
// Downgrade label
// Set paths and lower label ID
// Set a new label on input file.
string lowerlabelId = "<lower-label-id>";
cout << "\nApplying new Label ID " << lowerlabelId << " to " << filePathOut << endl;
mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED);
// Try to apply a label with lower sensitivity.
try
{
handler->SetLabel(engine->GetLabelById(lowerlabelId), labelingOptions, mip::ProtectionSettings());
}
catch (const mip::JustificationRequiredError& e)
{
// Request justification from user.
cout<<"Please provide justification for downgrading a label: "<<endl;
string justification;
cin >> justification;
// Set Justification provided flag
bool isDowngradeJustified = true;
mip::LabelingOptions labelingOptions(mip::AssignmentMethod::PRIVILEGED);
labelingOptions.SetDowngradeJustification(isDowngradeJustified,justification);
//Set new label.
handler->SetLabel(engine->GetLabelById(lowerlabelId), labelingOptions, mip::ProtectionSettings());
}
catch (const std::exception& e)
{
cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n";
system("pause");
return 1;
}
// Commit changes, save as a different output file
string lowerFilePathOut = "<lower-output-file-path>";
try
{
cout << "Committing changes" << endl;
auto commitPromise = std::make_shared<std::promise<bool>>();
auto commitFuture = commitPromise->get_future();
handler->CommitAsync(lowerFilePathOut, commitPromise);
if (commitFuture.get()) {
cout << "\nLabel committed to file: " << lowerFilePathOut << endl;
}
else {
cout << "Failed to label: " + lowerFilePathOut << endl;
return 1;
}
}
catch (const std::exception& e)
{
cout << "An exception occurred... did you specify a valid commit file path?\n\n" << e.what() << "'\n";
system("pause");
return 1;
}
system("pause");
// Set up async FileHandler for output file operations
string lowerActualFilePath = "<lower-content-identifier>";
try
{
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<FileHandler>>>();
auto handlerFuture = handlerPromise->get_future();
engine->CreateFileHandlerAsync(
lowerFilePathOut,
lowerActualFilePath,
true,
std::make_shared<FileHandlerObserver>(),
handlerPromise);
handler = handlerFuture.get();
}
catch (const std::exception& e)
{
cout << "An exception occurred... did you specify a valid output file path?\n\n" << e.what() << "'\n";
system("pause");
return 1;
}
// Get the lowered label from output file
try
{
cout << "\nGetting the label committed to file: " << lowerFilePathOut << endl;
auto lowerLabel = handler->GetLabel();
cout << "Name: " + lowerLabel->GetLabel()->GetName() << endl;
cout << "Id: " + lowerLabel->GetLabel()->GetId() << endl;
}
catch (const std::exception& e)
{
cout << "An exception occurred... did you specify a valid label ID?\n\n" << e.what() << "'\n";
system("pause");
return 1;
}
system("pause");
Ganti nilai tempat penampung dalam kode sumber menggunakan nilai berikut:
Placeholder Nilai <lower-label-id> ID label, disalin dari output konsol di Mulai Cepat sebelumnya, misalnya: bb7ed207-046a-4caf-9826-647cff56b990
. Pastikan memiliki sensitivitas yang lebih rendah daripada label file yang dilindungi sebelumnya.<lower-output-file-path> Jalur file output yang ingin Anda simpan file yang dimodifikasi. <pengidentifikasi konten yang lebih rendah> Pengidentifikasi yang dapat dibaca manusia untuk konten tersebut.
Membangun dan menguji aplikasi
Buat dan uji aplikasi klien Anda.
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.
Jika proyek Anda berhasil membangun dan berjalan, aplikasi meminta token akses, setiap kali SDK memanggil metode Anda
AcquireOAuth2Token()
.
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 f55c2dea-db0f-47cd-8520-a52e1590fb6z to c:\Test\Test.docx
Committing changes
Label committed to file: c:\Test\Test.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: Highly Confidential
Id: f55c2dea-db0f-47cd-8520-a52e1590fb6z
Press any key to continue . . .
Applying new Label ID f42a3342-8706-4288-bd31-ebb85995028z to c:\Test\Test_labeled.docx
Please provide justification for downgrading a label:
Need for sharing with wider audience.
Committing changes
Label committed to file: c:\Test\Test_downgraded.docx
Press any key to continue . . .
Getting the label committed to file: c:\Test\Test_downgraded.docx
Name: General
Id: f42a3342-8706-4288-bd31-ebb85995028z
Press any key to continue . . .
Harap dicatat, jika label yang dihapus dari file memerlukan pembenaran sesuai kebijakan label, pendekatan serupa harus diikuti untuk DeleteLabel()
operasi. DeleteLabel()
fungsi melemparkan mip::JustificationRequiredError
pengecualian. isDowngradeJustified
bendera harus diatur ke true dalam penanganan pengecualian sebelum menghapus label berhasil.