Share via


Uw toepassing ontwikkelen

Belangrijk

Versies van de Microsoft Rights Management Service SDK die vóór maart 2020 zijn uitgebracht, worden afgeschaft; toepassingen die eerdere versies gebruiken, moeten worden bijgewerkt voor gebruik van de release van maart 2020. Zie de afschaffingsmelding voor meer informatie.

Er zijn geen verdere verbeteringen gepland voor de Microsoft Rights Management Service SDK. We raden u ten zeerste aan de Microsoft Information Protection SDK te gebruiken voor classificatie-, label- en beveiligingsservices.

In dit voorbeeld gaat u een eenvoudige consoletoepassing bouwen die communiceert met de Azure Information Protection-service (AIP). Als invoer wordt het pad van een te beveiligen document gebruikt, waarna dit document wordt beveiligd met een ad-hocbeleid of een Azure-sjabloon. Met de toepassing worden vervolgens de juiste beleidsregels volgens de invoer toegepast, waarbij een document wordt gemaakt waarvan de informatie wordt beveiligd. U gaat de voorbeeldcode Azure IP test application gebruiken, die u op Github kunt vinden.

Vereisten voor voorbeeld-app

  • Besturingssysteem: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 of Windows Server 2012
  • Programmeertaal: C# (.NET Framework 3.0 en hoger)
  • Ontwikkelomgeving: Visual Studio 2015 (of hoger)

Uw Azure-configuratie instellen

Als u Azure voor deze app wilt instellen, moet u een tenant-id, een symmetrische sleutel en een principal-id voor de toepassing maken.

Tenantconfiguratie voor Azure AD

Als u de Azure AD-omgeving voor Azure Information Protection wilt configureren, volgt u de richtlijnen in het activeren van de beveiligingsservice van Azure Information Protection.

Als de service is geactiveerd, hebt u PowerShell-onderdelen nodig voor de volgende stappen. Volg de beveiliging van Azure Information Protection beheren met behulp van PowerShell om dit te bereiken.

Uw tenant-id ophalen

  • Voer PowerShell uit als beheerder.
  • Importeer de RMS-module: Import-Module AIPService
  • Maak verbinding met de service met de referenties van de toegewezen gebruiker: Connect-AipService –Verbose
  • Zorg ervoor dat RMS is ingeschakeld: enable-aipservice
  • Haal de tenant-id op door de volgende opdracht uit te voeren: Get-AipServiceConfiguration

Noteer de waarde van BPOSId (tenant-id). U hebt deze waarde nodig voor toekomstige stappen.

Voorbeelduitvoerget-AadrmConfiguration-cmdlet-uitvoer

  • Verbreek de verbinding met de service: Disconnect-AipServiceService

Een service-principal maken

Ga als volgt te werk om een service-principal te maken:

Een service-principal bestaat uit referenties die globaal zijn geconfigureerd voor toegangsbeheer zodat een service kan worden geverifieerd met Microsoft Azure AD en gegevens kunnen worden beveiligd met Microsoft Azure AD Rights Management

  • Voer PowerShell uit als beheerder
  • Importeer de Microsoft Azure AD-module met behulp van: Import-Module MSOnline
  • Maak verbinding met uw onlineservice met de referenties van de toegewezen gebruiker: Connect-MsolService
  • Maak een nieuwe service-principal door de volgende opdracht uit te voeren: New-MsolServicePrincipal
  • Geef een naam op voor uw service-principal

    Registreer de symmetrische sleutel en de principal-id van de toepassing voor toekomstig gebruik.

VoorbeelduitvoernewMsolServicePrincipal-cmdlet-uitvoer

  • Voeg de principal-id van de toepassing, de symmetrische sleutel en de tenant-id toe aan het bestand App.config van de toepassing.

Voorbeeld van App.config App.configbestand

  • De ClientID en RedirectUri zijn voor u beschikbaar vanaf het moment dat u uw toepassing in Azure hebt geregistreerd. Zie Azure RMS configureren voor ADAL-verificatie voor meer informatie over het registreren van uw toepassing in Azure en het verkrijgen van ClientID en RedirectUri.

Ontwerpoverzicht

In het volgende diagram ziet u een architectuur en processtroom voor de app die u maakt. De stappen worden hieronder beschreven. ontwerpoverzicht

  1. De gebruiker:
    • Voer het pad in van het te beveiligen bestand
    • Selecteert een sjabloon of maakt een ad-hocbeleid
  2. In de toepassing wordt verificatie aangevraagd met AIP.
  3. De verificatie wordt bevestigd door AIP
  4. In de toepassing worden sjablonen aangevraagd vanuit AIP.
  5. Met AIP worden de vooraf gedefinieerde sjablonen geretourneerd.
  6. In de toepassing wordt het opgegeven bestand met de opgegeven locatie gezocht.
  7. Het AIP-beveiligingsbeleid wordt door de toepassing op het bestand toegepast.

Hoe de code werkt

In het voorbeeld, Azure IP Test, wordt gestart met het bestand Iprotect.cs. Dit is een C#-consoletoepassing en, zoals voor alle AIP-toepassingen geldt, begint u met het laden van MSIPC.dll zoals wordt aangegeven in de main()-methode.

//Loads MSIPC.dll
SafeNativeMethods.IpcInitialize();
SafeNativeMethods.IpcSetAPIMode(APIMode.Server);

De parameters laden die nodig zijn voor verbinding met Azure

//Loads credentials for the service principal from App.Config
SymmetricKeyCredential symmetricKeyCred = new SymmetricKeyCredential();
symmetricKeyCred.AppPrincipalId = ConfigurationManager.AppSettings["AppPrincipalId"];
symmetricKeyCred.Base64Key = ConfigurationManager.AppSettings["Base64Key"];
symmetricKeyCred.BposTenantId = ConfigurationManager.AppSettings["BposTenantId"];

Wanneer u het bestandspad in de consoletoepassing opgeeft, wordt in de toepassing gecontroleerd of het document al is versleuteld. De klasse van de methode is SafeFileApiNativeMethods.

var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);

Als het document niet is versleuteld, wordt doorgegaan met het versleutelen van het document. Dit gebeurt met behulp van de selectie die u op opdrachtprompt hebt opgegeven.

if (!checkEncryptionStatus.ToString().ToLower().Contains(alreadyEncrypted))
{
  if (method == EncryptionMethod1)
  {
    //Encrypt a file via AIP template
    ProtectWithTemplate(symmetricKeyCred, filePath);

  }
  else if (method == EncryptionMethod2)
  {
    //Encrypt a file using ad-hoc policy
    ProtectWithAdHocPolicy(symmetricKeyCred, filePath);
  }
}

De optie voor beveiliging met sjabloon wordt voortgezet om de sjabloonlijst van de server op te halen en de gebruiker de optie te bieden die kan worden geselecteerd.

Als u sjablonen niet hebt gewijzigd, worden standaardsjablonen uit AIP weergegeven

public static void ProtectWithTemplate(SymmetricKeyCredential symmetricKeyCredential, string filePath)
{
  // Gets the available templates for this tenant
  Collection<TemplateInfo> templates = SafeNativeMethods.IpcGetTemplateList(null, false, true,
      false, true, null, null, symmetricKeyCredential);

  //Requests tenant template to use for encryption
  Console.WriteLine("Please select the template you would like to use to encrypt the file.");

  //Outputs templates available for selection
  int counter = 0;
  for (int i = 0; i < templates.Count; i++)
  {
    counter++;
    Console.WriteLine(counter + ". " + templates.ElementAt(i).Name + "\n" +
        templates.ElementAt(i).Description);
  }

  //Parses template selection
  string input = Console.ReadLine();
  int templateSelection;
  bool parseResult = Int32.TryParse(input, out templateSelection);

  //Returns error if no template selection is entered
  if (parseResult)
  {
    //Ensures template value entered is valid
    if (0 < templateSelection && templateSelection <= counter)
    {
      templateSelection -= templateSelection;

      // Encrypts the file using the selected template
      TemplateInfo selectedTemplateInfo = templates.ElementAt(templateSelection);

      string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(filePath,
          selectedTemplateInfo.TemplateId,
          SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST, true, false, true, null,
          symmetricKeyCredential);
    }
  }
}

Als u een ad-hocbeleid selecteert, moet de gebruiker van de toepassing de e-mailadressen opgeven van de personen die over de rechten zouden moeten beschikken. In deze sectie wordt de licentie gemaakt met de methode IpcCreateLicenseFromScratch() en wordt het nieuwe beleid op de sjabloon toegepast.

if (issuerDisplayName.Trim() != "")
{
  // Gets the available issuers of rights policy templates.
  // The available issuers is a list of RMS servers that this user has already contacted.
  try
  {
    Collection<TemplateIssuer> templateIssuers = SafeNativeMethods.IpcGetTemplateIssuerList(
                                                    null,
                                                    true,
                                                    false,
                                                    false, true, null, symmetricKeyCredential);

    // Creates the policy and associates the chosen user rights with it
    SafeInformationProtectionLicenseHandle handle = SafeNativeMethods.IpcCreateLicenseFromScratch(
                                                        templateIssuers.ElementAt(0));
    SafeNativeMethods.IpcSetLicenseOwner(handle, owner);
    SafeNativeMethods.IpcSetLicenseUserRightsList(handle, userRights);
    SafeNativeMethods.IpcSetLicenseDescriptor(handle, new TemplateInfo(null, CultureInfo.CurrentCulture,
                                                            policyName,
                                                            policyDescription,
                                                            issuerDisplayName,
                                                            false));

    //Encrypts the file using the ad hoc policy
    string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(
                                    filePath,
                                    handle,
                                    SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST,
                                    true,
                                    false,
                                    true,
                                    null,
                                    symmetricKeyCredential);
    }
}

Voorbeeld van interactie van de gebruiker

Als u alles hebt gebouwd en uitgevoerd, ziet de uitvoer van de toepassing er ongeveer als volgt uit:

  1. U wordt gevraagd een versleutelingsmethode te selecteren. app-uitvoer - stap 1

  2. U wordt gevraagd het pad naar het te beveiligen bestand op te geven. app-uitvoer - stap 2

  3. U wordt gevraagd het e-mailadres van de licentie-eigenaar in te voeren (deze eigenaar moet Globale beheerder-bevoegdheden hebben voor de Azure AD-tenant). app-uitvoer - stap 3

  4. U voert de e-mailadressen in van de gebruikers die toegangsrechten voor het bestand moeten hebben (e-mailadressen moeten van elkaar worden gescheiden met spaties). app-uitvoer - stap 4

  5. U selecteert in een lijst de rechten die u aan de gemachtigde gebruikers wilt verlenen. app-uitvoer - stap 5

  6. Ten slotte voert u enkele beleidsmetagegevens in: beleidsnaam, beschrijving en verlener (Azure AD Tenant) weergavenaam-app-uitvoer - stap 6