Microsoft Information Protection File SDK – Odůvodnění akce pro snížení popisku citlivosti u souboru (C++)
Tento rychlý start řeší zpracování operace popisku downgrade, když zásada popisku vyžaduje odůvodnění. V této části použijeme mip::FileHandler
třídu pro změnu popisků souboru. Další podrobnosti najdete v referenčních informacích k rozhraní API.
Předpoklady
Pokud jste to ještě neudělali, nezapomeňte před pokračováním dokončit následující požadavky:
- Úplný rychlý start: Nejprve nastavte nebo získejte popisky citlivosti (C++), které sestaví počáteční řešení sady Visual Studio a zobrazí seznam popisků citlivosti organizace a nastaví a přečte popisky citlivosti ze souboru. Tento rychlý start "How to - Downgrade/Remove a label that needs a justification (C++)" rychlý start vychází z předchozího.
- Volitelně: Projděte si koncepty obslužných rutin souborů v konceptech sady MIP SDK.
Přidání logiky pro nastavení nižšího popisku na chráněný soubor
Přidejte logiku pro nastavení popisku citlivosti v souboru pomocí objektu mip::FileHandler
.
Otevřete řešení sady Visual Studio, které jste vytvořili v předchozím rychlém startu: Nastavení nebo získání popisků citlivosti (C++).
Pomocí Průzkumník řešení otevřete soubor .cpp v projektu, který obsahuje implementaci
main()
metody. Ve výchozím nastavení se použije stejný název jako projekt, který obsahuje, který jste zadali při vytváření projektu.Do horní části souboru přidejte následující #include a direktivy using pod odpovídající existující direktivy:
#include "mip/file/file_error.h" using mip::JustificationRequiredError; using std::cin;
Aktualizujte hodnotu z předchozího rychlého startu
<label-id>
na popisek citlivosti, který vyžaduje odůvodnění snížení. Během tohoto rychlého startu nejprve nastavíme tento popisek a pak ho v dalších krocích zkusíme snížit pomocí fragmentů kódu.Na konec
main()
těla nížesystem("pause");
a nad blok vypnutí (kde jste skončili v předchozím rychlém startu) vložte následující kód:
// 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");
Zástupné hodnoty ve zdrojovém kódu nahraďte následujícími hodnotami:
Zástupný symbol Hodnota <lower-label-id> ID popisku zkopírované z výstupu konzoly v předchozím rychlém startu, například: bb7ed207-046a-4caf-9826-647cff56b990
. Ujistěte se, že má nižší citlivost než popisek dříve chráněného souboru.<lower-output-file-path> Cesta k výstupnímu souboru, do kterého chcete uložit upravený soubor. <lower-content-identifier> Identifikátor pro obsah čitelný člověkem.
Sestavení a otestování aplikace
Sestavte a otestujte klientskou aplikaci.
K sestavení klientské aplikace použijte kombinaci kláves CTRL-SHIFT-B (řešení sestavení). Pokud nemáte žádné chyby sestavení, spusťte aplikaci pomocí klávesy F5 (spustit ladění).
Pokud se projekt sestaví a úspěšně spustí, aplikace vyzve k zadání přístupového tokenu pokaždé, když sada SDK volá vaši
AcquireOAuth2Token()
metodu.
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 . . .
Upozorňujeme, že pokud popisek odstraněný ze souboru vyžaduje odůvodnění podle zásad popisku, měl by být podobný DeleteLabel()
přístup pro operaci dodržen. DeleteLabel()
funkce vyvolá mip::JustificationRequiredError
výjimku. isDowngradeJustified
Před úspěšným odstraněním popisku by měl být příznak nastaven na true při zpracování výjimek.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro