SDK de archivo de Microsoft Information Protection: justificación de la acción para reducir una etiqueta de confidencialidad en un archivo (C++)
Este inicio rápido trata el control de una operación de etiqueta de degradación cuando la directiva de etiquetas requiere justificación. Aquí, usaremos la clase mip::FileHandler
para cambiar las etiquetas de un archivo. Para obtener más información, consulte El SDK de Microsoft Information Protection (MIP) para C++: Referencia.
Requisitos previos
Si todavía no lo ha hecho, complete los siguientes requisitos previos antes de continuar:
- Complete primero Inicio rápido: Establecimiento u obtención de etiquetas de confidencialidad (C++), donde se crea una solución de inicio de Visual Studio, para enumerar las etiquetas de confidencialidad de una organización y establecer y leer las etiquetas desde un archivo y en él. Este inicio rápido "Degradación o eliminación de una etiqueta que necesita una justificación (C++)" se basa en el anterior.
- Opcionalmente, revise los conceptos sobre controladores de archivos en el SDK de MIP.
Incorporación de la lógica para establecer una etiqueta de nivel inferior en un archivo protegido
Agregue lógica para establecer y obtener una etiqueta de confidencialidad en un archivo, mediante el objeto mip::FileHandler
.
Abra la solución de Visual Studio que ha creado en el artículo anterior Inicio rápido: Establecimiento u obtención de etiquetas de confidencialidad (C++).
Desde el Explorador de soluciones, abra el archivo .cpp del proyecto que contiene la implementación del método
main()
. De manera predeterminada, tiene el mismo nombre que el proyecto que lo contiene, que especificó al crear el proyecto.Agregue las siguientes directivas #include y using, debajo de las directivas existentes correspondientes, en la parte superior del archivo:
#include "mip/file/file_error.h" using mip::JustificationRequiredError; using std::cin;
Actualice el valor
<label-id>
del inicio rápido anterior a una etiqueta de confidencialidad que requiera justificación para reducir su nivel. Durante la ejecución de este inicio rápido, estableceremos esta etiqueta en primer lugar y, a continuación, intentaremos reducirla a través de fragmentos de código en pasos adicionales.Hacia la parte final del cuerpo de
main()
, debajo desystem("pause");
y encima del bloque de apagado (donde lo ha dejado en el inicio rápido anterior), inserte el código siguiente:
// 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");
Reemplace los valores de marcador de posición del código fuente por los valores siguientes:
Marcador Valor <lower-label-id> Un identificador de etiqueta, copiado de la salida de la consola en el inicio rápido anterior, por ejemplo: bb7ed207-046a-4caf-9826-647cff56b990
. Asegúrese de que tiene una sensibilidad inferior a la etiqueta de archivo protegida anteriormente.<lower-output-file-path> La ruta de acceso de archivo de salida en la que desea guardar el archivo modificado. <lower-content-identifier> Un identificador legible para el contenido.
Compilar y probar la aplicación
Compile y pruebe la aplicación cliente.
Presione CTRL-MAYÚS-B (Compilar solución) para compilar la aplicación cliente. Si no hay errores de compilación, presione F5 (Iniciar depuración) para ejecutar la aplicación.
Si el proyecto se compila y se ejecuta correctamente, la aplicación solicita un token de acceso cada vez que el SDK llama al método
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 . . .
Tenga en cuenta que, en caso de que la etiqueta que se elimina de un archivo requiera una justificación según la directiva de etiqueta, debe seguirse un enfoque similar para que DeleteLabel()
funcione. La función DeleteLabel()
genera una excepción mip::JustificationRequiredError
. La marca isDowngradeJustified
debe establecerse en true en el control de excepciones antes de eliminar la etiqueta correctamente.