Microsoft Information Protection SDK - Door de gebruiker gedefinieerde machtigingen

De Microsoft Information Protection SDK ondersteunt twee primaire typen labelgestuurde machtigingen: op basis van sjablonen en door de gebruiker gedefinieerd.

  • Op sjablonen gebaseerde machtigingen: Deze rechten worden gedefinieerd door de labelbeheerder in het Beveiligings- en compliancecentrum. Deze labels worden centraal beheerd en wijzigingen in de configuratie hebben invloed op gebruikers die al kopieën van de bestanden hebben. Als de beheerder bijvoorbeeld een gebruiker verwijdert uit de lijst met geautoriseerde gebruikers, heeft die gebruiker geen toegang meer tot de beveiligde gegevens wanneer deze de volgende keer probeert een licentie op te halen.

  • Door de gebruiker gedefinieerde machtigingen: deze rechten worden gedefinieerd op het moment van labelen door de eindgebruiker of toepassing. Machtigingen worden overgedragen aan de MIP SDK in de vorm van een verzameling gebruiker-naar-rollen of gebruiker-naar-rechtentoewijzingen. Deze rechten worden naar de publicatielicentie voor het beveiligde document geschreven en kunnen, in tegenstelling tot machtigingen op basis van sjablonen, niet centraal worden beheerd of gewijzigd na het delen zonder directe toegang en wijziging van het document.

Gebruikers, rechten en rollen

Omdat wordt verwacht dat rechten worden gedefinieerd door de gebruiker op het moment van labelen, moet uw toepassing een interface bieden waarmee de gebruiker of service invoer kan leveren voor de e-mailadressen en rechten of rollen die de gebruiker zal hebben. Deze configuratie wordt uitgevoerd door een verzameling UserRoles of UserRights objecten door te geven die specifiek bepalen wie welk toegangsniveau tot de documenten moet hebben.

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "bob@contoso.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

Het resultaat is dat u een List<UserRights> verzameling hebt die aangeeft dat zowel Alice als Bob VIEW en EDIT hebben voor het beveiligde bestand. Als u meer gebruikers met een andere set machtigingen wilt toevoegen, herhaalt u het proces om een tweede UserRights object te maken, waarbij de nieuwe gebruikers en machtigingen worden doorgegeven en vervolgens aan de List<UserRights> verzameling wordt toegevoegd door aan te roepen userRightsList.Add(userRights2).

Dit patroon geldt ook voor UserRoles en kan eenvoudig worden geïmplementeerd door rechten te vervangen door rollen en een List<UserRoles> verzameling te maken.

Beveiligen voor een domein

Het toepassen van door de gebruiker gedefinieerde machtigingen voor een domein vereist het gebruik van een bekend e-mailvoorvoegsel en het doeldomein als het e-mailadres. Dat adres ziet er als volgt uit: AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@contoso.com.

In uw toepassing moeten gebruikers een domein kunnen opgeven, zoals contoso.com of fabrikam.com. Wanneer de toepassing de beveiligingsdescriptor maakt, zal AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ moeten worden toegevoegd aan het domeinachtervoegsel.

In het onderstaande voorbeeld gaan we ervan uit dat de gebruiker alice@contoso.com en alle van Fabrikam.com als geldige geadresseerden heeft opgegeven.

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@fabrikam.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

Beveiliging toepassen

Instellingsbeveiliging kan worden bereikt door een ProtectionDescriptor van het List<UserRights> of List<UserRoles> object te maken en die vervolgens door te geven aan FileHandler.SetProtection(). Voer ten slotte de wijziging door in het bestand om een nieuw bestand te schrijven.

Wanneer beveiliging toepassen op bestanden

Wanneer u een label instelt via FileHandler.SetLabel() de MIP SDK, heeft alles wat nodig is om actie te ondernemen en beveiliging toe te passen. Wanneer het label is geconfigureerd voor door de gebruiker gedefinieerde machtigingen (UDP), kan uw toepassing niet van tevoren weten dat het label een UDP-label is. De MIP SDK geeft deze informatie weer door een uitzondering op het type Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredExceptionte genereren. Uw FileHandler code moet deze uitzondering ondervangen en vervolgens uw gebruikers- of serviceinterface activeren om de aangepaste machtigingen te definiëren. Zodra dit is voltooid, kunt u beveiliging instellen. In het volgende voorbeeld ziet u het end-to-end-patroon, maar wordt ervan uitgegaan dat u al een functie hebt geïmplementeerd om het List<UserRights> object te bouwen.

try
{
    // Attempt to set the label. If it's a UDP label, this will throw. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());
}

catch (Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException)
{
    // Assumes you've create a function that returns the List<UserRights> as previously detailed. 
    List<UserRights> userRightsList = GetUserRights();

    // Create a ProtectionDescriptor using the set of UserRights.
    ProtectionDescriptor protectionDescriptor = new ProtectionDescriptor(userRightsList);
    
    // Apply protection to the file using the new ProtectionDescriptor. 
    handler.SetProtection(protectionDescriptor, new ProtectionSettings());

    // Set the label. This will now succeed as protection has been defined. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());

    // Commit the change. 
    var result = Task.Run(async () => await handler.CommitAsync("myFileOutput.xlsx")).Result;
}

Aangepaste beveiliging

Dit proces kan ook worden gebruikt om alleen beveiliging in te stellen door beveiliging in te stellen en de SetLabel() stap over te slaan. Als uw toepassing geen label hoeft toe te passen, is de uitzonderingshandler niet vereist en kan beveiliging worden ingesteld door het ProtectionDescriptor patroon - ->>SetProtection()CommitAsync() te volgen.

Volgende stappen