Bagikan melalui


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 .

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

  2. 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.

  3. 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;
    
    
  4. <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.

  5. Menjelang akhir main() isi, di bawah system("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");

  1. 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.

  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() .

  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.