Développement de votre applicationDeveloping your application

Dans cet exemple, vous allez développer une application console simple qui interagit avec le service Azure Information Protection (AIP).In this example you are going to build a simple console application that interacts with the Azure Information Protection service (AIP). Celle-ci prend comme entrée le chemin d’un document à protéger, puis le protège à l’aide d’une stratégie ad hoc ou d’un modèle Azure.It will take as input the path of a document to protect, then protect it with an ad-hoc policy or an Azure template. L’application applique ensuite les stratégies appropriées en fonction des entrées, ce qui permet de créer un document dont les informations sont protégées.The application will then apply the correct policies according to the inputs, creating a information protected document. L’exemple de code que vous allez utiliser est l’application de test Azure IP qui se trouve sur Github.The sample code you will be using is Azure IP test application and is on Github.

Prérequis de l’exemple d’applicationSample app prerequisites

  • Système d’exploitation : Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 ou Windows Server 2012Operating System: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2, or Windows Server 2012
  • Langage de programmation : C# (.NET Framework 3.0 et versions ultérieures)Programming Language: C# (.NET Framework 3.0 and above)
  • Environnement de développement : Visual Studio 2015 (et versions ultérieures)Development environment: Visual Studio 2015 (and later)

Définition de votre configuration AzureSetting up your Azure Configuration

La configuration Azure pour cette application vous oblige à créer un ID de locataire, une clé symétrique et un ID de principal d’application.Getting Azure set up for this app requires you to create a Tenant ID, a Symmetric Key, and an Application Principal ID.

Configuration du locataire Azure ADAzure AD Tenant configuration

Pour configurer l’environnement Azure AD pour Azure Information Protection, suivez les instructions données dans Activation d’Azure Rights Management.To configure the Azure AD environment for Azure Information Protection, follow the guidance in Activating Azure Rights Management.

Une fois que le service est activé, vous avez besoin des composants PowerShell pour les étapes suivantes.Once the service is activated you will need PowerShell components for the next steps. Suivez Administration du service Azure Rights Management à l’aide de Windows PowerShell pour cela.Follow Administering the Azure Rights Management service by using Windows PowerShell to accomplish this.

Obtention de votre ID de locataireGetting your Tenant ID

  • En tant qu’administrateur, exécutez PowerShell.As an administrator, run PowerShell.
  • Importez le module RMS : Import-Module AADRMImport the RMS module: Import-Module AADRM
  • Connectez-vous au service avec les informations d’identification de l’utilisateur affecté : Connect-AadrmService –VerboseConnect to the service with the assigned user credentials: Connect-AadrmService –Verbose
  • Vérifiez que RMS est activé : Enable-AADRMEnsure RMS is enabled: Enable-AADRM
  • Obtenez votre ID de locataire en exécutant : Get-AadrmConfigurationGet your tenant ID by running: Get-AadrmConfiguration

Enregistrez la valeur BPOSId (ID de locataire).Record the BPOSId (tenant ID) value. Vous en aurez besoin dans les étapes suivantes.You will need it in future steps.

Exemple de sortie sortie de l’applet de commandeExample output cmdlet output

  • Déconnectez-vous du service : Disconnect-AadrmServiceDisconnect from the service: Disconnect-AadrmService

Créer un principal du serviceCreate a service Principal

Suivez ces étapes pour créer un principal du service :Follow these steps to create a Service Principal:

Un principal du service correspond à des informations d’identification configurées globalement pour le contrôle d’accès qui permet à un service de s’authentifier auprès de Microsoft Azure AD et de protéger des informations à l’aide de Microsoft Azure AD Rights Management.A service principal is credentials configured globally for access control that allow a service to authenticate with Microsoft Azure AD and to protect information using Microsoft Azure AD Rights Management

  • En tant qu’administrateur, exécutez PowerShell.As an administrator, run PowerShell
  • Importez le module Microsoft Azure AD en utilisant : Import-Module MSOnlineImport the Microsoft Azure AD module using: Import-Module MSOnline
  • Connectez-vous à votre service en ligne avec les informations d’identification de l’utilisateur affecté : Connect-MsolServiceConnect to your online service with the assigned user credentials: Connect-MsolService
  • Créez un principal du service en exécutant : New-MsolServicePrincipalCreate a new service principal by running: New-MsolServicePrincipal
  • Fournissez un nom à votre principal du service.Provide a name for your service principal > Enregistrez la clé symétrique et l’ID de principal d’application pour une utilisation ultérieure.Record the symmetric key and application principal id for future use.

Exemple de sortie sortie de l’applet de commandeExample output cmdlet output

  • Ajoutez votre ID de principal d’application, votre clé symétrique et votre ID de locataire au fichier App.config de l’application.Add your application principal id, symmetric key, and tenant ID to the application’s App.config file.

Example de fichier App.config sortie de l’applet de commandeExample App.config file cmdlet output

  • Les valeurs ClientID et RedirectUri sont mises à votre disposition quand vous inscrivez votre application dans Azure.The ClientID and RedirectUri will be available to you from when you registered your application in Azure. Pour plus d’informations sur la façon d’inscrire votre application dans Azure et d’obtenir les valeurs ClientID et RedirectUri, consultez Configurer Azure RMS pour l’authentification ADAL.For more information on how to register your application in Azure and to acquire a ClientID and RedirectUri see, Configure Azure RMS for ADAL authentication.

Résumé de conceptionDesign summary

Le diagramme suivant illustre une architecture et un flux de processus pour l’application que vous créez. Les étapes sont décrites ci-après.The following diagram depicts an architecture and process flow for the app you're creating, steps outlined below. résumé de conceptiondesign summary

  1. L’utilisateur entre :The user inputs:
    • Le chemin du fichier à protégerThe path of the file to be protected
    • Sélectionne un modèle ou crée une stratégie ad hoc.Selects a template or creates an ad-hoc policy
  2. L’application demande une authentification auprès d’AIP.The application requests authentication with AIP.
  3. AIP confirme l’authentification.AIP confirms authentication
  4. L’application demande des modèles à AIP.The application requests templates from the AIP.
  5. AIP retourne des modèles prédéfinis.AIP returns pre-defined templates.
  6. L’application recherche le fichier spécifié avec l’emplacement donné.The application locates the specified file with given location.
  7. L’application applique la stratégie de protection AIP au fichier.The application applies the AIP protection policy to the file.

Fonctionnement du codeHow the code works

Dans l’exemple, Test Azure IP, la solution commence avec le fichier Iprotect.cs.In the sample, Azure IP Test, the solution begins up with the file Iprotect.cs. Il s’agit d’une application console C# et, comme avec toute autre application AIP, vous commencez par charger MSIPC.dll comme indiqué dans la méthode main().This is a C# console application and, like with any other AIP enabled application, you begin with loading the MSIPC.dll as shown in the main() method.

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

Charger les paramètres nécessaires pour se connecter à AzureLoad the parameters needed to connect to 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"];

Quand vous fournissez le chemin du fichier dans l’application console, l’application vérifie si le document est déjà chiffré.When you provide the file path in the console application, the application checks if the document is already encrypted. La méthode relève de la classe SafeFileApiNativeMethods.The method is of the SafeFileApiNativeMethods class.

var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);

Si le document n’est pas chiffré, elle procède au chiffrement du document avec la sélection fournie à l’invite.If the document is not encrypted, then it proceeds to encrypt the document with the selection provided on the prompt.

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);
  }

L’option de protection avec un modèle permet d’obtenir la liste des modèles à partir du serveur et offre à l’utilisateur la possibilité de faire une sélection.The protect with template option proceeds to get the template list from the server and provides the user the option to select.

Si vous n’avez pas modifié les modèles, alors vous obtenez les modèles par défaut d’AIP.If you did not Modify templates then you will get default templates from AIP

 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);
      }
    }
  }

Si vous sélectionnez la stratégie ad hoc, l’utilisateur de l’application doit fournir les adresses e-mail des personnes dotées de droits.If you select ad-hoc policy, the user of the application has to provide emails of the people that would have rights. Dans cette section, la licence est créée à l’aide de la méthode IpcCreateLicenseFromScratch() et en appliquant la nouvelle stratégie dans le modèle.In this section the license is created using the IpcCreateLicenseFromScratch() method and applying the new policy on the template.

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);
   }
}

Exemple d’interaction de l’utilisateurUser interaction example

Une fois que tout est généré et en cours d’exécution, les sorties de l’application doivent ressembler à ce qui suit :Once you get everything built and executing, the outputs of the application should look like the following:

1.Vous êtes invité à sélectionner une méthode de chiffrement.1.You are prompted to select an encryption method. sortie de l’application - étape 1app output - step 1

  1. Vous devez fournir le chemin du fichier à protéger.You are asked to provide the path to the file to be protected. sortie de l’application - étape 2app output - step 2

  2. Vous êtes invité à entrer l’adresse e-mail d’un détenteur de licence (ce détenteur doit posséder des privilèges d’administrateur général sur le locataire Azure AD).You are prompted to enter a license owner’s email (this owner must have Global Administrator privileges on the Azure AD Tenant). sortie de l’application - étape 3app output - step 3

  3. Vous entrez les adresses e-mail des utilisateurs qui vont disposer de droits d’accès au fichier (en les séparant par des espaces).You enter email addresses of users who will have rights to access the file (emails must be separated by spaces). sortie de l’application - étape 4app output - step 4

  4. Vous sélectionnez les droits à octroyer aux utilisateurs autorisés dans la liste.You select from a list of rights to be given to the authorized users. sortie de l’application - étape 5app output - step 5

  5. Enfin, vous entrez certaines métadonnées de stratégie : nom de la stratégie, description et nom complet de l’émetteur (locataire Azure AD) sortie de l’application - étape 6Finally, you enter some policy metadata: policy name, description, and issuer (Azure AD Tenant) display name app output - step 6

CommentairesComments

Avant de transmettre vos commentaires, nous vous demandons de consulter notre règlement interne.Before commenting, we ask that you review our House rules.