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 exemplo
- 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 exemplo
- 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.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).
- As entradas do utilizador:
- O caminho do ficheiro a ser protegido
- Seleciona um modelo ou cria uma política ad hoc
- A aplicação solicita a autenticação com AIP.
- O AIP confirma a autenticação
- A aplicação solicita modelos do AIP.
- O AIP devolve modelos predefinidos.
- A aplicação localiza o ficheiro especificado com a localização fornecida.
- 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:
É-lhe solicitado que selecione um método de encriptação.
É-lhe solicitado para indicar o caminho do ficheiro a ser protegido.
É-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).
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).
Seleciona a partir de uma lista de direitos a atribuir aos utilizadores autorizados.
Finalmente, introduz alguns metadados de política: nome de política, descrição e emitente (Azure AD Tenant)