Microsoft Information Protection SDK - Concepten van beveiligingshandler

In de MIP Protection SDK mip::ProtectionHandler worden de functies weergegeven voor het versleutelen en ontsleutelen van beveiligde streams en buffers, het uitvoeren van toegangscontroles, het verkrijgen van de publicatielicentie en het ophalen van kenmerken van de beveiligde informatie.

Behoeften

Voor het maken van een ProtectionHandler bestand om te kunnen werken met een specifiek bestand is het volgende vereist:

  • Een mip::MipContext
  • Een mip::ProtectionProfile
  • Een mip::ProtectionEngine is toegevoegd aan de ProtectionProfile
  • Een klasse die wordt overgenomen mip::ProtectionHandler::Observer
  • Een mip::ProtectionDescriptor of publicatielicentie

Een beveiligingshandler maken

mip::ProtectionHandler objecten worden gebouwd voor beveiligingsbewerkingen of verbruiksbewerkingen. De handler wordt gemaakt met behulp van een van de vier functies, afhankelijk van het scenario.

  • mip::ProtectionEngine->CreateProtectionHandlerForConsumptionAsync()
  • mip::ProtectionEngine->CreateProtectionHandlerForConsumption()
  • mip::ProtectionEngine->CreateProtectionHandlerForPublishingAsync()
  • mip::ProtectionEngine->CreateProtectionHandlerForPublishing()

Deze functies accepteren een mip::ProtectionHandler::PublishingSettings of mip::ProtectionHandler::ConsumptionSettings object.

Een publicatiehandler maken

Voor het maken van een publicatie-handler zijn drie stappen vereist:

  1. Maak een mip::ProtectionDescriptor object.
  2. Gebruik de mip::ProtectionDescriptor functie om te instantiëren mip::ProtectionHandler::PublishingSettings.
  3. Roep mip::ProtectionEngine::CreateProtectionHandlerForPublishingAsync() aan met het PublishingSettings object, de waarnemer en de belofte.

Maken op basis van descriptor

Als u inhoud wilt beveiligen die nog niet is beveiligd of als u nieuwe beveiliging wilt toepassen op ontsleutelde inhoud, maakt u een mip::ProtectionDescriptor. Gebruik dit om het mip::ProtectionHandler::PublishingSettings() object te instantiëren. De SDK retourneert het resultaat via de mip::ProtectionHandler::Observer.

// Create the protection descriptor, passing in a templateId.
auto descriptorBuilder = mip::ProtectionDescriptorBuilder::CreateFromTemplate(protectionOptions.templateId);
std::shared_ptr<mip::ProtectionDescriptor> descriptor = descriptorBuilder->Build();

// Define the handler promise, future, and observer.
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<mip::ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();
auto handlerObserver = std::make_shared<ProtectionHandlerObserverImpl>();

// Create the PublishingSettings object using the previously-created descriptor as input.
mip::ProtectionHandler::PublishingSettings publishingSettings = mip::ProtectionHandler::PublishingSettings(descriptor);

// Create/get the publishing handler from the publishing settings, observer, and promise.
mEngine->CreateProtectionHandlerForPublishingAsync(publishingSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();
return handler;

Nadat u het ProtectionHandler object hebt gemaakt, kunt u beveiligingsbewerkingen uitvoeren voor versleuteling en ontsleuteling. Haal de publicatielicentie op uit de handler en sla deze op met de versleutelde inhoud. Als u de publicatielicentie wilt ophalen, belt u handler->GetSerializedPublishingLicense();.

Zonder de bijbehorende publicatielicentie kunt u beveiligde inhoud niet ontsleutelen .

Maak de verbruikshandler

Voor het maken van een verbruikshandler zijn drie stappen vereist:

  1. Extraheer een geserialiseerde publicatielicentie als std::vector<uint8_t> vanuit de beveiligde inhoud.
  2. Gebruik de geserialiseerde publicatielicentie om een instantie te maken mip::ProtectionHandler::ConsumptionSettings.
  3. Roep mip::ProtectionEngine::CreateProtectionHandlerForConsumptionAsync() aan met het ConsumptionSettings object, de waarnemer en de belofte.

In dit voorbeeld wordt ervan uitgegaan dat de publicatielicentie al is gelezen uit een bepaalde bron en is opgeslagen in std::vector<uint8_t> serializedPublishingLicense.

//TODO: Implement GetPublishingLicense()
//Snip implies that function reads PL from source file, database, stream, etc.
std::vector<uint8_t> serializedPublishingLicense = GetPublishingLicense(filePath);

// Define the handler promise, future, and observer.
auto handlerPromise = std::make_shared<std::promise<std::shared_ptr<mip::ProtectionHandler>>>();
auto handlerFuture = handlerPromise->get_future();
shared_ptr<ProtectionHandlerObserverImpl> handlerObserver = std::make_shared<ProtectionHandlerObserverImpl>();

// Create the consumption settings object from the publishing license.
mip::ProtectionHandler::ConsumptionSettings consumptionSettings = mip::ProtectionHandler::ConsumptionSettings(serializedPublishingLicense);

// Create/get the publishing handler from the publishing settings, observer, and promise.
mEngine->CreateProtectionHandlerForConsumptionAsync(consumptionSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();

Volgende stappen