Concept - Delegatie in de MIP SDK

De Microsoft Information Protection SDK biedt twee paden voor servicetoepassingen die namens een andere gebruiker kunnen optreden. Delegering kan nodig zijn wanneer bestanden moeten worden gelabeld, beveiligd of gebruikt in de context van een gebruikersidentiteit die verschilt van de service-identiteit. Deze gedelegeerde identiteit kan worden ingesteld op het niveau van de engine of handler en waar deze is ingesteld, is afhankelijk van de use-case.

Delegatie op basis van engine-instellingen

De MIP SDK biedt ondersteuning voor het opgeven van een gedelegeerd e-mailadres van gebruikers in het instellingenobject voor alle SDK's; Bestand, beveiliging en beleid. Dit wordt bereikt door de DelegatedUserEmail eigenschap in te stellen op het instellingenobject. Het resultaat is dat de engine die met dat instellingenobject is geïnitialiseerd , alle MIP-bewerkingen uitvoert alsof het de gebruiker was die aan de DelegatedUserEmail eigenschap is verstrekt. Beleidspolicy wordt opgehaald voor die specifieke gebruiker en alle beveiligingsbewerkingen worden uitgevoerd namens die gebruiker, inclusief als eigenaar van bestanden die zijn beveiligd.

Dit patroon is handig wanneer uw servicetoepassing volledig moet functioneren als de gebruiker; het beleid moet alleen worden opgehaald voor de opgegeven gebruiker en eventuele ontsleutelingsbewerkingen moeten worden uitgevoerd in de context van de gebruikersidentiteit. Het is belangrijk dat bij het maken van deze engine een engine-id wordt opgegeven die uniek is voor die gebruiker, vaak het e-mailadres. Dit zorgt ervoor dat de voordelen van caching ten volle benut worden. Als er geen unieke engine-id is opgegeven, kan uw toepassing slechte prestaties ondervinden.

Bestands-SDK

In het volgende voorbeeld ziet u hoe u de gedelegeerde identiteit instelt voor een File SDK-toepassing in C++ en C#. Hetzelfde patroon kan worden gebruikt voor de Beleids-SDK.

In dit voorbeeld ziet u hoe u een gemachtigde engine maakt in de File SDK in .NET.

// C# Example for creating a delegated file engine
string delegatedUserEmail = "alice@contoso.com";
var engineSettings = new PolicyEngineSettings(delegatedUserEmail, authDelegate, "", "en-US")
{
    // Provide the identity for service discovery.
    Identity = identity,
    // Set the identity for which all MIP operations will be performed.
    DelegatedUserEmail = delegatedUserEmail
};

var engine = Task.Run(async () => await profile.AddEngineAsync(engineSettings)).Result;

In dit voorbeeld ziet u hoe u in C++ een delegate engine maakt in de File SDK.

// C++ Example for creating a delegated file engine
std::string delegatedUserEmail = "alice@contoso.com";
FileEngine::Settings engineSettings(delegatedUserEmail, mAuthDelegate, "", "en-US", false);
// Set the identity for which all MIP operations will be performed. 
engineSettings.SetDelegatedUserEmail(delegatedUserEmail);

auto enginePromise = std::make_shared<std::promise<std::shared_ptr<FileEngine>>>();
auto engineFuture = enginePromise->get_future();

mProfile->AddEngineAsync(engineSettings, enginePromise);
mEngine = engineFuture.get();

Het resultaat is dat alle bestandsengines worden gemaakt namens de opgegeven gebruiker.

Overdracht op basis van handler

In scenario's waarin we alleen bestanden in de context van een specifieke gebruikersidentiteit hoeven te beveiligen , biedt de FileHandler methode voor het doorgeven van de gebruikersidentiteit via een ProtectionSettings object. Het beleid en eventuele ontsleutelingsbewerkingen worden uitgevoerd als de geverifieerde service-id. De beveiligingsactie wordt uitgevoerd namens de opgegeven gebruiker; die gebruiker is de eigenaar van MIP-beveiliging in het document.

Bestands-SDK

Alleen het toepassen van beveiliging, direct of via een label, zal worden uitgevoerd zoals door de gebruiker op het ProtectionSettings object is ingesteld. Dit object wordt doorgegeven aan de SetLabel() of SetProtection() functies in de File SDK.

In dit voorbeeld ziet u hoe u een bewerking voor de beveiliging van gemachtigden uitvoert in File SDK in .NET.

string delegatedUserEmail = "bob@contoso.com";
ProtectionSettings protectionSettings = new ProtectionSettings()
{
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};
handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, protectionSettings);
// Similar pattern for SetProtection()
// handler.SetProtection(protectionDescriptor, protectionSettings);

In dit voorbeeld ziet u hoe u een bewerking voor de beveiliging van gemachtigden uitvoert in de Bestands-SDK in C++.

mip::ProtectionSettings protectionSettings;
// Set the delegated mail address 
protectionSettings.SetDelegatedUserEmail(delegatedUserEmail);
handler->SetLabel(mEngine->GetLabelById(labelId), labelingOptions, protectionSettings);

Het resultaat is dat alle handler-schrijfbewerkingen waarop beveiliging wordt toegepast, worden uitgevoerd als de gedelegeerde gebruiker.

Beveiligings-SDK

De Protection SDK werkt anders dan de File SDK. Er zijn twee typen handlers die kunnen worden gemaakt, één voor publicatie en één voor verbruik. Net als bij de Bestands-SDK wordt het gedelegeerde e-mailadres ingesteld via het instellingenobject voor elk type handler.

.NET

In dit voorbeeld ziet u hoe u gedelegeerde publicatie uitvoert.

string delegatedUserEmail = "bob@contoso.com";
PublishingSettings publishingSettings = new PublishingSettings(protectionDescriptor)
{
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};          
var protectionHandler = engine.CreateProtectionHandlerForPublishing(publishingSettings);

In dit voorbeeld ziet u hoe u gedelegeerd verbruik uitvoert.

string delegatedUserEmail = "bob@contoso.com";
ConsumptionSettings consumptionSettings = new ConsumptionSettings(plInfo)
{                
    ContentName = "A few bytes.",
    // Set the delegated mail address 
    DelegatedUserEmail = delegatedUserEmail
};
var protectionHandler = engine.CreateProtectionHandlerForConsumption(consumptionSettings);

C++

In dit voorbeeld ziet u hoe u gedelegeerde publicatie uitvoert.

string delegatedUserEmail = "bob@contoso.com";
mip::ProtectionHandler::PublishingSettings publishingSettings = mip::ProtectionHandler::PublishingSettings(descriptor);
// Set the delegated mail address 
publishingSettings.SetDelegatedUserEmail(delegatedUserEmail);
mEngine->CreateProtectionHandlerForPublishingAsync(publishingSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();	

In dit voorbeeld ziet u hoe u gedelegeerd verbruik uitvoert.

string delegatedUserEmail = "bob@contoso.com";
mip::ProtectionHandler::ConsumptionSettings consumptionSettings = mip::ProtectionHandler::ConsumptionSettings(serializedPublishingLicense);
// Set the delegated mail address 
consumptionSettings.SetDelegatedUserEmail(delegatedUserEmail);
mEngine->CreateProtectionHandlerForConsumptionAsync(consumptionSettings, handlerObserver, handlerPromise);
auto handler = handlerFuture.get();	

Vereiste toestemmingen

Voor elk van de bovenstaande scenario's is een andere set machtigingen vereist.

Scenario Machtiging vereist
Gedelegeerde engine voor bestands-SDK UnifiedPolicy.Tenant.Read
Content.DelegatedReader
Content.DelegatedWriter
Gedelegeerde engine voor beleids-SDK UnifiedPolicy.Tenant.Read
Gedelegeerde handler voor bestands-SDK Content.DelegatedWriter
Gedelegeerde publicatie van de Protection SDK Content.DelegatedWriter
Gedelegeerd verbruik van protection-SDK Content.DelegatedReader

Raadpleeg voor een volledige beoordeling van machtigingen en waar ze moeten worden ingesteld API-machtigingen voor de Microsoft Information Protection SDK.

Volgende stappen