Desenvolver a sua aplicaçãoDeveloping your application

Neste exemplo, vai criar uma aplicação de consola simples que interage com o serviço do 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). Este irá considerar o caminho de um documento a proteger como uma entrada e, em seguida, vai protegê-lo com uma política ad hoc ou um modelo do 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. A aplicação irá aplicar as políticas corretas, de acordo com as entradas, e criar um documento de informações protegido.The application will then apply the correct policies according to the inputs, creating a information protected document. O código de exemplo que irá utilizar é a aplicação de teste de IP do Azure e encontra-se no Github.The sample code you will be using is Azure IP test application and is on Github.

Pré-requisitos da aplicação de exemploSample app prerequisites

  • Sistema Operativo: 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
  • Linguagem de Programação: C# (.NET Framework 3.0 e superior)Programming Language: C# (.NET Framework 3.0 and above)
  • Ambiente de desenvolvimento: Visual Studio 2015 (e posterior)Development environment: Visual Studio 2015 (and later)

Definir a Configuração do AzureSetting up your Azure Configuration

A configuração do Azure para esta aplicação requer que crie um ID de Inquilino, uma Chave Simétrica e um ID Principal da Aplicação.Getting Azure set up for this app requires you to create a Tenant ID, a Symmetric Key, and an Application Principal ID.

Configuração do Inquilino do Azure ADAzure AD Tenant configuration

Para configurar o ambiente do Azure AD para o Azure Information Protection, siga as orientações em Ativar o Azure Rights Management.To configure the Azure AD environment for Azure Information Protection, follow the guidance in Activating Azure Rights Management.

Após a ativação do serviço, precisará de componentes do PowerShell para os passos seguintes.Once the service is activated you will need PowerShell components for the next steps. Veja Administrar o serviço Azure Rights Management através do Windows PowerShell para os obter.Follow Administering the Azure Rights Management service by using Windows PowerShell to accomplish this.

Obter o ID de InquilinoGetting your Tenant ID

  • Enquanto administrador, abra o PowerShell.As an administrator, run PowerShell.
  • Importe o módulo do RMS: Import-Module AADRMImport the RMS module: Import-Module AADRM
  • Ligue-se ao serviço com as credenciais de utilizador atribuídas: Connect-AadrmService –VerboseConnect to the service with the assigned user credentials: Connect-AadrmService –Verbose
  • Confirme que o RMS está ativado: Enable-AADRMEnsure RMS is enabled: Enable-AADRM
  • Obtenha o ID do Inquilino ao executar: Get-AadrmConfigurationGet your tenant ID by running: Get-AadrmConfiguration

Registe o valor de BPOSId (ID do inquilino).Record the BPOSId (tenant ID) value. Irá precisar dele nos próximos passos.You will need it in future steps.

Saída de exemplo resultado do cmdletExample output cmdlet output

  • Encerre o serviço: Disconnect-AadrmServiceDisconnect from the service: Disconnect-AadrmService

Criar um Principal de serviçoCreate a service Principal

Siga estes passos para criar um Principal de Serviço:Follow these steps to create a Service Principal:

Um principal de serviço corresponde às credenciais configuradas globalmente para o controlo de acesso, que permite a autenticação de um serviço com o Microsoft Azure AD e protege as informações com o Microsoft Azure AD Rights ManagementA 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

  • Enquanto administrador, execute o PowerShellAs an administrator, run PowerShell
  • Importe o módulo do Microsoft Azure AD com:Import-Module MSOnlineImport the Microsoft Azure AD module using: Import-Module MSOnline
  • Ligue-se ao serviço online com as credenciais de utilizador atribuídas: Connect-MsolServiceConnect to your online service with the assigned user credentials: Connect-MsolService
  • Crie um novo principal de serviço ao executar:New-MsolServicePrincipalCreate a new service principal by running: New-MsolServicePrincipal
  • Forneça um nome para o seu principal de serviçoProvide a name for your service principal > Registe a chave simétrica e o ID principal da aplicação para utilização futura.Record the symmetric key and application principal id for future use.

Saída de exemplo resultado do cmdletExample output cmdlet output

  • Adicione o seu ID principal da aplicação, a chave simétrica e o ID do inquilino ao ficheiro App.config da aplicação.Add your application principal id, symmetric key, and tenant ID to the application’s App.config file.

Ficheiro App.config de exemplo resultado do cmdletExample App.config file cmdlet output

  • O ClientID e RedirectUri estarão disponíveis quando registar a aplicação no Azure.The ClientID and RedirectUri will be available to you from when you registered your application in Azure. Para obter mais informações sobre como registar a sua aplicação no Azure e para adquirir um ClientID e RedirectUri, veja Configurar o Azure RMS para a autenticação 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.

Resumo da estruturaDesign summary

O diagrama seguinte descreve uma arquitetura e o fluxo de processo da aplicação que está a criar (passos descritos abaixo).The following diagram depicts an architecture and process flow for the app you're creating, steps outlined below. resumo da estruturadesign summary

  1. As entradas do utilizador:The user inputs:
    • O caminho do ficheiro a ser protegidoThe path of the file to be protected
    • Seleciona um modelo ou cria uma política ad hocSelects a template or creates an ad-hoc policy
  2. A aplicação solicita a autenticação com AIP.The application requests authentication with AIP.
  3. O AIP confirma a autenticaçãoAIP confirms authentication
  4. A aplicação solicita modelos do AIP.The application requests templates from the AIP.
  5. O AIP devolve modelos predefinidos.AIP returns pre-defined templates.
  6. A aplicação localiza o ficheiro especificado com a localização fornecida.The application locates the specified file with given location.
  7. A aplicação aplica a política de proteção do AIP ao ficheiro.The application applies the AIP protection policy to the file.

Como funciona o códigoHow the code works

No exemplo, Teste de IP do Azure, a solução começa com o ficheiro Iprotect.cs.In the sample, Azure IP Test, the solution begins up with the file Iprotect.cs. Esta é uma aplicação da consola C# e, como com qualquer outra aplicação com suporte AIP, começa por carregar o MSIPC.dll, conforme mostrado no método 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);

Carregue os parâmetros necessários para ligar ao 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"];

Ao fornecer o caminho do ficheiro na aplicação da consola, a aplicação verifica se o documento já está encriptado.When you provide the file path in the console application, the application checks if the document is already encrypted. O método pertence à classe SafeFileApiNativeMethods.The method is of the SafeFileApiNativeMethods class.

var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);

Se o documento não estiver encriptado, este realiza a encriptação do mesmo com a seleção fornecida na linha de comandos.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);
  }

A opção proteger com modelo obtém a lista de modelos do servidor e fornece ao utilizador a opção a selecionar.The protect with template option proceeds to get the template list from the server and provides the user the option to select.

Se não tiver modificado os modelos, terá os modelos predefinidos do AIPIf 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);
      }
    }
  }

Se selecionar a política ad hoc, o utilizador da aplicação terá de disponibilizar os e-mails das pessoas que terão direitos.If you select ad-hoc policy, the user of the application has to provide emails of the people that would have rights. Nesta secção, a licença é criada com o método IpcCreateLicenseFromScratch() e a nova política no modelo é aplicada.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);
   }
}

Exemplo de interação do utilizadorUser interaction example

Depois de ter tudo compilado e em execução, os resultados da aplicação devem ter o seguinte aspeto:Once you get everything built and executing, the outputs of the application should look like the following:

1.É-lhe pedido para selecionar um método de encriptação.1.You are prompted to select an encryption method. resultado da aplicação – passo 1app output - step 1

  1. É-lhe solicitado para indicar o caminho do ficheiro a ser protegido.You are asked to provide the path to the file to be protected. resultado da aplicação – passo 2app output - step 2

  2. É-lhe pedido para introduzir o e-mail de um proprietário de licença (este proprietário tem de ter privilégios de Administrador Global no Inquilino do Azure AD).You are prompted to enter a license owner’s email (this owner must have Global Administrator privileges on the Azure AD Tenant). resultado da aplicação – passo 3app output - step 3

  3. Introduza os endereços de e-mail dos utilizadores que terão direitos de acesso ao ficheiro (os e-mails devem ser separados por espaços).You enter email addresses of users who will have rights to access the file (emails must be separated by spaces). resultado da aplicação – passo 4app output - step 4

  4. Seleciona a partir de uma lista de direitos a atribuir aos utilizadores autorizados.You select from a list of rights to be given to the authorized users. resultado da aplicação – passo 5app output - step 5

  5. Por último, introduza alguns metadados da política: nome da política, descrição e nome a apresentar do emissor (Inquilino do Azure AD) resultado da aplicação – passo 6Finally, you enter some policy metadata: policy name, description, and issuer (Azure AD Tenant) display name app output - step 6

ComentáriosComments

Antes de inserir um comentário, pedimos-lhe que reveja as nossas Regras básicas.Before commenting, we ask that you review our House rules.