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: De labelbeheerder definieert deze rechten in de Microsoft Purview-portal. Deze labels worden centraal beheerd en configuratiewijzigingen zijn van 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 hij de volgende keer probeert een licentie op te halen.

  • Door de gebruiker gedefinieerde machtigingen: de eindgebruiker of toepassing definieert deze rechten op het moment van labelen. Geef machtigingen door aan de MIP SDK in de vorm van een verzameling gebruikers-naar-rollen of gebruikers-naar-rechtentoewijzingen. De MIP SDK schrijft deze rechten naar de publicatielicentie voor het beveiligde document. In tegenstelling tot machtigingen op basis van sjablonen, kunt u deze rechten niet centraal beheren of wijzigen nadat u het document hebt gedeeld zonder directe toegang en wijziging van het document.

Gebruikers, rechten en rollen

Omdat de gebruiker rechten definieert op het moment van labelen, moet uw toepassing een interface bieden voor de gebruiker of service om e-mailadressen en rechten of rollen in te voeren. Als u toegang wilt configureren, geeft u een verzameling UserRoles of UserRights objecten door die bepalen wie welk toegangsniveau heeft tot de documenten.

// 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 een List<UserRights> verzameling 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, geeft u de nieuwe gebruikers en machtigingen door en voegt u het vervolgens toe aan de List<UserRights> verzameling door aan te roepen userRightsList.Add(userRights2).

Hetzelfde patroon is van toepassing op UserRoles. Als u deze wilt implementeren, vervangt u rechten door rollen en maakt u een List<UserRoles> verzameling.

Beveiligen voor een domein

Het toepassen van door de gebruiker gedefinieerde machtigingen voor een domein vereist een bekend e-mailvoorvoegsel en het doeldomein als het e-mailadres. Dat adres ziet eruit als 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 aanmaakt, plaatst deze AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ vóór de domeinsuffix.

Deze bekende groep is ook hoe u rechten verleent aan alle geverifieerde gebruikers in een organisatie. De AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ groep bevat elke gebruiker in de opgegeven Microsoft Entra tenant, zodat deze het dichtst overeenkomt met de groep IEDEREEN van Active Directory Rights Management Services (AD RMS). Het bereik is altijd beperkt tot één enkele tenant: er is geen tenantoverschrijdende identiteit die een geverifieerde gebruiker in alle tenants rechten verleent, dus voeg voor elke organisatie die u wilt opnemen een afzonderlijke vermelding met AllStaff-...@domain toe. Zie Gebruiksrechten configureren voor Azure Information Protectionvoor meer informatie.

In het volgende voorbeeld geeft de gebruiker alice@contoso.com en iedereen van Fabrikam.com op als geldige ontvangers.

// 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

Als u beveiliging wilt instellen, maakt u een ProtectionDescriptor van het List<UserRights> of List<UserRoles> object en geeft u die descriptor door 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 met behulp van FileHandler.SetLabel(), heeft de MIP SDK alles wat nodig is om actie te ondernemen en beveiliging toe te passen. Wanneer een label gebruikmaakt van 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. Nadat dit proces 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

U kunt dit proces ook gebruiken 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. Als u beveiliging wilt instellen, volgt u het ProtectionDescriptor patroon - -CommitAsync()>SetProtection()> .

Volgende stappen