Habilitación de la aplicación de servicio para que funcione con RMS basado en la nube

Importante

Las versiones del SDK del servicio Microsoft Rights Management publicadas antes de marzo de 2020 están en desuso; Las aplicaciones que usan versiones anteriores deben actualizarse para usar la versión de marzo de 2020. Para obtener información completa, consulte el aviso de desuso.

No se planean mejoras adicionales para el SDK del servicio Microsoft Rights Management. Se recomienda encarecidamente la adopción del SDK de Microsoft Information Protection para los servicios de clasificación, etiquetado y protección.

En este tema se describe cómo configurar la aplicación de servicio para que use Azure Rights Management. Para más información, vea Getting started with Azure Rights Management (Introducción a Azure Rights Management).

Importante
Para usar la aplicación de servicio de Rights Management Services SDK 2.1 con Azure RMS, debe crear sus propios inquilinos. Para más información, consulte Requisitos de Azure RMS: Suscripciones en la nube que admiten Azure RMS.

Requisitos previos

Conectarse al servicio de administración de permisos de Azure

  • Llame a IpcInitialize.

  • Establezca IpcSetGlobalProperty.

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

    Nota Para obtener más información, consulte Establecimiento del modo de seguridad de la API.

  • Los pasos siguientes son la configuración para crear una instancia de una estructura de IPC_PROMPT_CTX con el miembro pcCredential (IPC_CREDENTIAL) rellenado con información de conexión del servicio de Azure Rights Management.

  • Use la información de la creación de la identidad del servicio de claves simétricas (consulte los requisitos previos enumerados anteriormente en este tema) para establecer los parámetros wszServicePrincipal, wszBposTenantId y cbKey al crear una instancia de una estructura de IPC_CREDENTIAL_SYMMETRIC_KEY .

Nota: Debido a una condición existente en nuestro servicio de detección, las credenciales de clave simétrica solo se aceptan si está en Norteamérica. Por lo tanto, si se encuentra en otra región, deberá especificar directamente las URL de inquilino. Esto se realiza mediante el parámetro pConnectionInfo , el tipo IPC_CONNECTION_INFO, en las funciones IpcGetTemplateList o IpcGetTemplateIssuerList.

Generar una clave simétrica y recopilar la información necesaria

Instrucciones para generar una clave simétrica

Nota: Debe ser administrador de inquilinos para poder usar los cmdlet de PowerShell.

  • Inicie PowerShell y ejecute los comandos siguientes para generar una clave.

    Import-Module MSOnline

    Connect-MsolService (escriba sus credenciales de administrador)

    New-MsolServicePrincipal (escriba un nombre para mostrar)

  • Una vez generada la clave simétrica, mostrará información sobre la clave (la propia clave y 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
    

Instrucciones para conocer TenantBposId y Urls

  • Instale el módulo de Azure RMS para PowerShell.

  • Inicie PowerShell y ejecute los comandos siguientes para obtener la configuración de RMS del inquilino.

    Import-Module AIPService

    Connect-AipService (escriba sus credenciales de administrador)

    Get-AipServiceConfiguration

  • Cree una instancia de un IPC_CREDENTIAL_SYMMETRIC_KEY y establezca algunos miembros.

    // 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 obtener más información, consulte IPC_CREDENTIAL_SYMMETRIC_KEY.

  • Cree una instancia de una estructura de IPC_CREDENTIAL que contenga la instancia de IPC_CREDENTIAL_SYMMETRIC_KEY .

    Nota: Los miembros connectionInfo se establecen con las direcciones URL de la llamada anterior a Get-AipServiceConfiguration y se anotan aquí con esos nombres 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 una plantilla y cifrar

  • Seleccione una plantilla para el cifrado. Llame a IpcGetTemplateList pasando la misma instancia 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);
    
  • Con la plantilla de anteriormente en este tema, llame a IpcfEncrcyptFile y pase la misma instancia de IPC_PROMPT_CTX.

    Ejemplo de uso 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);
    

    Ejemplo de uso de IpcfDecryptFile:

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

Ha completado todos los pasos necesarios para que la aplicación pueda usar Azure Rights Management.