Microsoft Information Protection File SDK- actie-reden voor het verlagen van een vertrouwelijkheidslabel op een bestand (C++)

In deze quickstart ziet u hoe u kunt omgaan met een bewerking voor het verlagen van een label wanneer het labelbeleid een rechtvaardiging vereist. Gebruik de mip::FileHandler klasse om de labels van een bestand te wijzigen. Zie Microsoft Information Protection SDK (MIP) voor C++: Naslaginformatie voor meer informatie.

Vereisten

Als u dat nog niet hebt gedaan, moet u de volgende vereisten voltooien voordat u doorgaat:

  • Voltooi eerst Quickstart: gevoeligheidslabels instellen/ophalen (C++). Deze quickstart bouwt voort op de vorige, waarmee een starter Visual Studio oplossing wordt gebouwd om de vertrouwelijkheidslabels van een organisatie weer te geven en vertrouwelijkheidslabels in of uit een bestand in te stellen en te lezen.
  • Optioneel: Controleer de concepten van bestandshandlers in de MIP SDK-concepten.

Logica toevoegen om een lager label in te stellen voor een beveiligd bestand

Voeg logica toe om een vertrouwelijkheidslabel in te stellen op een bestand met behulp van het mip::FileHandler object.

  1. Open de Visual Studio-oplossing die u in de vorige quickstart hebt gemaakt: Vertrouwelijkheidslabels instellen/ophalen (C++).

  2. Open in Solution Explorer het bestand .cpp in uw project dat de implementatie van de main() methode bevat. Deze wordt standaard ingesteld op dezelfde naam als het project dat het bevat, die u hebt opgegeven tijdens het maken van het project.

  3. Voeg de volgende #include- en using-instructies toe na de overeenkomstige bestaande instructies, bovenaan het bestand:

    
        #include "mip/file/file_error.h"
    
        using mip::JustificationRequiredError;
        using std::cin;
    
    
  4. Werk de waarde van <label-id> uit de eerdere quickstart bij naar een vertrouwelijkheidslabel waarvoor een motivering voor verlaging is vereist. Stel tijdens deze quickstart eerst dit label in en probeer het vervolgens te verlagen met behulp van codefragmenten in latere stappen.

  5. Voeg aan het einde van de main() hoofdtekst, na system("pause"); en vóór het afsluitblok (waar u was gebleven in de vorige quickstart), de volgende code in:


// 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. Vervang de tijdelijke aanduidingen in de broncode door de volgende waarden:

    Plaatsvervanger Waarde
    <onderste label-id> Een label-id, gekopieerd uit de console-uitvoer in de vorige quickstart, bijvoorbeeld: bb7ed207-046a-4caf-9826-647cff56b990. Controleer of deze een lagere gevoeligheid heeft dan het eerder beveiligde bestandslabel.
    <lager-uitvoer-bestandspad> Het pad naar het uitvoerbestand waar u het gewijzigde bestand wilt opslaan.
    <lagere-inhoud-verwijzer> Een door mensen leesbare id voor de inhoud.

De toepassing bouwen en testen

Bouw en test uw klantapplicatie.

  1. Gebruik Ctrl-Shift-B (build solution) om uw clienttoepassing te bouwen. Als u geen buildfouten hebt, gebruikt u F5 (Foutopsporing starten) om uw toepassing uit te voeren.

  2. Als uw project met succes wordt gebouwd en uitgevoerd, vraagt de toepassing om een toegangstoken telkens wanneer de SDK uw AcquireOAuth2Token() methode aanroept.

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

Als voor labelbeleid een reden is vereist om een label uit een bestand te verwijderen, gebruikt u een vergelijkbare benadering voor de DeleteLabel() bewerking. De DeleteLabel() functie genereert een mip::JustificationRequiredError uitzondering. Stel de isDowngradeJustified vlag in op true in uitzonderingsafhandeling voordat u het label verwijdert.

Volgende stappen