Fichier SDK Microsoft Information Protection - Justification d’action pour abaisser une étiquette de confidentialité sur un fichier (C++)
Ce démarrage rapide couvre la façon d’abaisser une étiquette lorsque la stratégie d’étiquette nécessite une justification. Ici, nous utiliserons la classe mip::FileHandler
pour modifier les étiquettes d’un fichier. Pour plus d’informations, consultez le Kit de développement logiciel (SDK) Microsoft Protection des données (MIP) pour C++ : Référence.
Prérequis
Si ce n’est déjà fait, veillez à satisfaire les prérequis suivants avant de poursuivre :
- Suivez d’abord Démarrage rapide : Définir/obtenir des étiquettes de confidentialité (C++), pour créer une solution Visual Studio de démarrage visant à lister les étiquettes de confidentialité d’une organisation, ainsi qu’à définir et lire les étiquettes de confidentialité vers/depuis un fichier. Ce démarrage rapide « Guide pratique - Abaisser/supprimer une étiquette qui nécessite une justification (C++) » est conçu à partir du précédent.
- Facultatif : passez en revue les Concepts de gestionnaires de fichiers dans les concepts du SDK MIP.
Ajouter une logique pour définir une étiquette inférieure sur un fichier protégé
Ajouter une logique pour définir une étiquette de confidentialité sur un fichier avec l’objet mip::FileHandler
.
Ouvrez la solution Visual Studio que vous avez créée dans l’article précédent, Démarrage rapide : Définir/obtenir des étiquettes de confidentialité (C++).
À l’aide de l’Explorateur de solutions, ouvrez le fichier .cpp dans votre projet qui contient l’implémentation de la méthode
main()
. Par défaut, il a le même nom que le projet qui le contient et que vous avez spécifié lors de la création du projet.Ajoutez les instructions #include et, à l’aide des directives ci-dessous, en haut du fichier, sous les directives existantes correspondantes :
#include "mip/file/file_error.h" using mip::JustificationRequiredError; using std::cin;
mettez à jour la valeur
<label-id>
du démarrage rapide précédent vers une étiquette de sensibilité qui nécessite une justification pour la réduction. Au cours de ce démarrage rapide, nous allons d’abord définir cette étiquette, puis essayer de la réduire par le biais d’extraits de code.Vers la fin du corps
main()
, en dessous desystem("pause");
et au-dessus du bloc d’arrêt (là où vous vous êtes arrêté dans le précédent démarrage rapide), insérez le code suivant :
// 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");
Remplacez les valeurs d’espace réservé dans le code source par les valeurs suivantes :
Paramètre substituable Valeur <lower-label-id> ID d’étiquette, copié à partir de la sortie de la console dans le démarrage rapide précédent, par exemple : bb7ed207-046a-4caf-9826-647cff56b990
. Assurez-vous qu’elle présente une sensibilité inférieure à celle de l’étiquette de fichier précédemment protégée.<lower-output-file-path> Chemin d’accès du fichier de sortie où le fichier modifié sera enregistré. <lower-content-identifier> Identificateur lisible par l’homme pour le contenu.
Concevoir et tester l’application
Générez et testez votre application cliente.
Utilisez CTRL-MAJ-B (Créer une solution) pour créer votre application cliente. Si vous n’avez aucune erreur de build, utilisez F5 (Démarrer le débogage) pour exécuter votre application.
Si votre projet est généré et exécuté correctement, l’application demande un jeton d’accès chaque fois que le kit de développement logiciel (SDK) appelle votre méthode
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 . . .
Notez que, si la suppression de l’étiquette d’un fichier nécessite une justification en fonction de la stratégie d’étiquette, une approche similaire doit être suivie pour l’opération DeleteLabel()
. La fonction DeleteLabel()
soulève une exception mip::JustificationRequiredError
. L’indicateur isDowngradeJustified
doit être défini sur True dans la gestion des exceptions avant de supprimer correctement l’étiquette.