Procedimentos: permitir que a aplicação de serviço funcione com o RMS baseado na nuvem

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.

Este tópico descreve os passos para configurar a aplicação do serviço para utilizar o Azure Rights Management. Para obter mais informações, consulte Introdução ao Azure Rights Management.

Importante
Para utilizar a aplicação de serviço SDK Rights Management Services 2.1 com o Azure RMS, terá de criar os seus inquilinos. Para obter mais informações, consulte Requisitos do Azure RMS: Subscrições na nuvem que suportam o Azure RMS

Pré-requisitos

Ligar ao Serviço Azure Rights Management

  • Chame IpcInitialize.

  • Defina IpcSetGlobalProperty.

    int mode = IPC_API_MODE_SERVER;
    IpcSetGlobalProperty(IPC_EI_API_MODE, &(mode));
    

    Nota Para obter mais informações, consulte definição do modo de segurança API

  • Os seguintes passos são a configuração para a criação de uma instância de uma estrutura IPC_PROMPT_CTX com o membro do pcCredential (IPC_CREDENTIAL) povoado com informações de ligação do Serviço de Gestão de Direitos Azure.

  • Utilize as informações da criação de identidade de serviço chave simétrica (consulte os pré-requisitos listados anteriormente neste tópico) para definir os parâmetros wszServicePrincipal, wszBposTenantId e cbKey quando criar uma instância de uma estrutura IPC_CREDENTIAL_SYMMETRIC_KEY .

Nota: devido a uma condição existente no nosso serviço de deteção, se não estiver na América do Norte, as credenciais da chave simétrica não serão aceites a partir de outras regiões; como tal, tem de especificar os URLs do inquilino diretamente. Isto é feito através do parâmetro pConnectionInfo , tipo IPC_CONNECTION_INFO, nas funções IpcGetTemplateList ou IpcGetTemplateIssuerList.

Gerar uma chave simétrica e recolher as informações necessárias

Instruções para gerar uma chave simétrica

Nota: tem de ser um administrador inquilino para utilizar cmdlets do Powershell.

  • Inicie o Powershell e execute os seguintes comandos para gerar uma chave

    Import-Module MSOnline

    Connect-MsolService (introduza as credenciais de administrador)

    New-MsolServicePrincipal (introduza um nome a apresentar)

  • Depois de gerar uma chave simétrica, transmitirá informações sobre a chave, incluindo a própria chave, e um AppPrincipalId.

    The following symmetric key was created as one was not supplied
    ZYbF/lTtwE28qplQofCpi2syWd11D83+A3DRlb2Jnv8=
    
    DisplayName : RMSTestApp
    ServicePrincipalNames : {7d9c1f38-600c-4b4d-8249-22427f016963}
    ObjectId : 0ee53770-ec86-409e-8939-6d8239880518
    AppPrincipalId : 7d9c1f38-600c-4b4d-8249-22427f016963
    

Instruções para descobrir TenantBposId e Urls

  • Instalar o Módulo do powershell do Azure RMS.

  • Inicie o Powershell e execute os seguintes comandos para obter a configuração do RMS do inquilino.

    Import-Module AIPService

    Connect-AipService (introduza as credenciais de administrador)

    Get-AipServiceConfiguration

  • Crie um exemplo de IPC_CREDENTIAL_SYMMETRIC_KEY e desemalte alguns membros.

    // Create a key structure.
    IPC_CREDENTIAL_SYMMETRIC_KEY symKey = {0};
    
    // Set each member with information from service creation.
    symKey.wszBase64Key = "your service principal key";
    symKey.wszAppPrincipalId = "your app principal identifier";
    symKey.wszBposTenantId = "your tenant identifier";
    

Para mais informações consulte, IPC_CREDENTIAL_SYMMETRIC_KEY.

  • Crie uma instância de uma estrutura IPC_CREDENTIAL que contenha a sua IPC_CREDENTIAL_SYMMETRIC_KEY instância.

    Nota: os membros connectionInfo são definidos com URLs a partir da chamada anterior para Get-AipServiceConfiguration e são indicados aqui com esses nomes de campo.

    // Create a credential structure.
    IPC_CREDENTIAL cred = {0};
    
    IPC_CONNECTION_INFO connectionInfo = {0};
    connectionInfo.wszIntranetUrl = LicensingIntranetDistributionPointUrl;
    connectionInfo.wszExtranetUrl = LicensingExtranetDistributionPointUrl;
    
    // Set each member.
    cred.dwType = IPC_CREDENTIAL_TYPE_SYMMETRIC_KEY;
    cred.pcCertContext = (PCCERT_CONTEXT)&symKey;
    
    // Create your prompt control.
    IPC_PROMPT_CTX promptCtx = {0};
    
    // Set each member.
    promptCtx.cbSize = sizeof(IPC_PROMPT_CTX);
    promptCtx.hwndParent = NULL;
    promptCtx.dwflags = IPC_PROMPT_FLAG_SILENT;
    promptCtx.hCancelEvent = NULL;
    promptCtx.pcCredential = &cred;
    

Identificar um modelo e encriptar

  • Selecione um modelo a utilizar para a encriptação. Ligue para ipcGetTemplateList passando no mesmo caso de IPC_PROMPT_CTX.

    PCIPC_TIL pTemplates = NULL;
    IPC_TEMPLATE_ISSUER templateIssuer = (pTemplateIssuerList->aTi)[0];
    
    hr = IpcGetTemplateList(&(templateIssuer.connectionInfo),
           IPC_GTL_FLAG_FORCE_DOWNLOAD,
           0,
           &promptCtx,
           NULL,
           &pTemplates);
    
  • Com o modelo de anterior neste tópico, ligue para IpcfEncrcyptFile, passando no mesmo caso de IPC_PROMPT_CTX.

    Utilização de exemplo de IpcfEncrcyptFile:

    LPCWSTR wszContentTemplateId = pTemplates->aTi[0].wszID;
    hr = IpcfEncryptFile(wszInputFilePath,
           wszContentTemplateId,
           IPCF_EF_TEMPLATE_ID,
           IPC_EF_FLAG_KEY_NO_PERSIST,
           &promptCtx,
           NULL,
           &wszOutputFilePath);
    

    Utilização de exemplo de IpcfDecryptFile:

    hr = IpcfDecryptFile(wszInputFilePath,
           IPCF_DF_FLAG_DEFAULT,
           &promptCtx,
           NULL,
           &wszOutputFilePath);
    

Concluiu os passos necessários para permitir que a sua aplicação utilize o Azure Rights Management.