Desenvolver a sua aplicação

Importante

As versões do Microsoft Rights Management Service SDK lançadas antes de março de 2020 são depreciadas; as aplicações que utilizam versões anteriores devem ser atualizadas para utilizar a versão de março de 2020. Para mais detalhes, consulte o aviso de depreciação.

Não estão previstas mais melhorias para o Microsoft Rights Management Service SDK. Recomendamos vivamente a adoção do Proteção de Informações da Microsoft SDK para serviços de classificação, rotulagem e proteção.

Neste exemplo, vai criar uma aplicação de consola simples que interage com o serviço do Azure Information Protection (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. A aplicação irá aplicar as políticas corretas, de acordo com as entradas, e criar um documento de informações protegido. O código de exemplo que irá utilizar é a aplicação de teste de IP do Azure e encontra-se no Github.

Pré-requisitos da aplicação de exemplo

  • Sistema Operativo: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 ou Windows Server 2012
  • Linguagem de Programação: C# (.NET Framework 3.0 e superior)
  • Ambiente de desenvolvimento: Visual Studio 2015 (e posterior)

Definir a Configuração do Azure

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.

Configuração do Inquilino do Azure AD

Para configurar o ambiente Azure AD para o Information Protection Azure, siga as orientações de Ativação do serviço de proteção da Azure Information Protection.

Após a ativação do serviço, precisará de componentes do PowerShell para os passos seguintes. Siga a proteção de administração da Azure Information Protection utilizando o PowerShell para o conseguir.

Obter o ID de Inquilino

  • Enquanto administrador, abra o PowerShell.
  • Importe o módulo do RMS: Import-Module AIPService
  • Ligue-se ao serviço com as credenciais de utilizador atribuídas: Connect-AipService –Verbose
  • Confirme que o RMS está ativado: enable-aipservice
  • Obtenha o ID do Inquilino ao executar: Get-AipServiceConfiguration

Registe o valor de BPOSId (ID do inquilino). Irá precisar dele nos próximos passos.

Saída de exemploGet-AadrmConfiguration cmdlet

  • Encerre o serviço: Disconnect-AipServiceService

Criar um Principal de serviço

Siga estes passos para criar um Principal de Serviço:

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 Management

  • Enquanto administrador, execute o PowerShell
  • Importe o módulo do Microsoft Azure AD com:Import-Module MSOnline
  • Ligue-se ao serviço online com as credenciais de utilizador atribuídas: Connect-MsolService
  • Crie um novo principal de serviço ao executar:New-MsolServicePrincipal
  • Forneça um nome para o seu principal de serviço

    Registe a chave simétrica e o ID principal da aplicação para utilização futura.

Saída exemploNewMsolServicePrincipal cmdlet

  • Adicione o seu ID principal da aplicação, a chave simétrica e o ID do inquilino ao ficheiro App.config da aplicação.

Arquivo de exemplo App.configarquivo exemplo App.config

  • O ClientID e o RedirectUri estarão disponíveis para si a partir do momento em que registou a sua candidatura em 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.

Resumo da estrutura

O diagrama seguinte descreve uma arquitetura e o fluxo de processo da aplicação que está a criar (passos descritos abaixo). resumo do projeto

  1. As entradas do utilizador:
    • O caminho do ficheiro a ser protegido
    • Seleciona um modelo ou cria uma política ad hoc
  2. A aplicação solicita a autenticação com AIP.
  3. O AIP confirma a autenticação
  4. A aplicação solicita modelos do AIP.
  5. O AIP devolve modelos predefinidos.
  6. A aplicação localiza o ficheiro especificado com a localização fornecida.
  7. A aplicação aplica a política de proteção do AIP ao ficheiro.

Como funciona o código

No exemplo, Teste de IP do Azure, a solução começa com o ficheiro 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().

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

Carregue os parâmetros necessários para ligar ao 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. O método pertence à classe SafeFileApiNativeMethods.

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 (!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.

Se não tiver modificado os modelos, terá os modelos predefinidos do 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. Nesta secção, a licença é criada com o método IpcCreateLicenseFromScratch() e a nova política no modelo é aplicada.

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 utilizador

Depois de ter tudo compilado e em execução, os resultados da aplicação devem ter o seguinte aspeto:

  1. É-lhe solicitado que selecione um método de encriptação. saída de aplicativo - passo 1

  2. É-lhe solicitado para indicar o caminho do ficheiro a ser protegido. saída de aplicativo - passo 2

  3. É-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). saída de aplicativo - passo 3

  4. 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). saída de aplicativo - passo 4

  5. Seleciona a partir de uma lista de direitos a atribuir aos utilizadores autorizados. saída de aplicativo - passo 5

  6. Finalmente, introduz alguns metadados de política: nome de política, descrição e emitente (Azure AD Tenant) produção de aplicativo de nome de exibição - passo 6