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.
Öppna Visual Studio-lösningen som du skapade i föregående snabbstart: Ange/hämta känslighetsetiketter (C++).
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.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;
<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.Mot slutet av brödtexten
main()
, undersystem("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");
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.
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.
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.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för