Dela via


Microsoft Information Protection File SDK – Åtgärdsmotivering för att sänka en känslighetsetikett på en fil (C++)

Den här snabbstarten tar upp hanteringen av en nedgraderingsetikettåtgärd när etikettprincipen kräver motivering. Här använder mip::FileHandler vi klassen för att ändra etiketterna för en fil. Mer information finns i API-referensen.

Förutsättningar

Om du inte redan har gjort det måste du slutföra följande krav innan du fortsätter:

  • Slutför snabbstart: Ange/hämta känslighetsetiketter (C++) först, som skapar en startlösning för Visual Studio, för att lista en organisations känslighetsetiketter, för att ange och läsa känslighetsetiketter till/från en fil. Snabbstarten "How to – Downgrade/Remove a label that needs a justification (C++)" bygger på den föregående.
  • Valfritt: Granska begrepp för filhanterare i MIP SDK-begreppen.

Lägg till logik för att ange en lägre etikett till en skyddad fil

Lägg till logik för att ange en känslighetsetikett för en fil med hjälp av mip::FileHandler objektet.

  1. Öppna Visual Studio-lösningen som du skapade i föregående snabbstart: Ange/hämta känslighetsetiketter (C++).

  2. Använd Solution Explorer och öppna .cpp-filen i projektet som innehåller implementeringen av main() metoden. Det är som standard samma namn som det projekt som innehåller det, som du angav när projektet skapades.

  3. Lägg till följande #include och använda direktiv, under motsvarande befintliga direktiv, överst i filen:

    
        #include "mip/file/file_error.h"
    
        using mip::JustificationRequiredError;
        using std::cin;
    
    
  4. <label-id> Uppdatera värdet från föregående snabbstart till en känslighetsetikett som kräver motivering för att sänka. Under den här snabbstartskörningen anger vi den här etiketten först och försöker sedan sänka den via kodfragment i ytterligare steg.

  5. Mot slutet av brödtexten main() , under system("pause"); och ovanför avstängningsblocket (där du slutade i föregående snabbstart), infogar du följande kod:


// 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. Ersätt platshållarvärdena i källkoden med hjälp av följande värden:

    Platshållare Värde
    <lower-label-id> Ett etikett-ID som kopierades från konsolens utdata i föregående snabbstart, till exempel: bb7ed207-046a-4caf-9826-647cff56b990. Kontrollera att den har lägre känslighet än den tidigare skyddade filetiketten.
    <lower-output-file-path> Sökvägen till utdatafilen som du vill spara den ändrade filen till.
    <lower-content-identifier> En identifierare som kan läsas av människor för innehållet.

Skapa och testa programmet

Skapa och testa klientprogrammet.

  1. Använd CTRL-SHIFT-B (Build Solution) för att skapa klientprogrammet. Om du inte har några byggfel använder du F5 (Starta felsökning) för att köra programmet.

  2. Om projektet har skapats och körts frågar programmet efter en åtkomsttoken varje gång SDK:t anropar din AcquireOAuth2Token() metod.

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

Observera att om etiketten som tas bort från en fil kräver en motivering enligt etikettprincipen bör liknande metod följas för DeleteLabel() åtgärd. DeleteLabel() funktionen utlöser ett mip::JustificationRequiredError undantag. isDowngradeJustified flaggan ska vara inställd på true i undantagshantering innan etiketten tas bort.