Procedura: Consentire all'applicazione di servizio di usare RMS basato su cloud

Importante

Le versioni di Microsoft Rights Management Service SDK rilasciate prima di marzo 2020 sono deprecate; le applicazioni che usano versioni precedenti devono essere aggiornate per usare la versione di marzo 2020. Per informazioni dettagliate, vedere l'avviso di deprecazione.

Non sono previsti ulteriori miglioramenti per Microsoft Rights Management Service SDK. È consigliabile adottare l'SDK di Microsoft Information Protection per la classificazione, l'etichettatura e i servizi di protezione.

Questo argomento descrive i passaggi per la configurazione dell’applicazione di servizio per l’uso di Azure Rights Management. Per altre informazioni, vedere Introduzione a Azure Rights Management.

Importante
Per usare l'applicazione di servizio Rights Management Services SDK 2.1 con Azure RMS, è necessario creare i propri tenant. Per altre informazioni, vedere Requisiti di Azure RMS: Sottoscrizioni cloud che supportano Azure RMS

Prerequisiti

Connessione al servizio Rights Management di Azure

  • Chiamare IpcInitialize.

  • Impostare IpcSetGlobalProperty.

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

    Nota Per altre informazioni, vedere Impostazione della modalità di sicurezza dell'API

  • I passaggi seguenti sono la configurazione per la creazione di un'istanza di una struttura di IPC_PROMPT_CTX con il membro pcCredential (IPC_CREDENTIAL) popolato con le informazioni di connessione dal servizio Azure Rights Management.

  • Usare le informazioni della creazione dell'identità del servizio chiavi simmetriche (vedere i prerequisiti elencati in precedenza in questo argomento) per impostare i parametri wszServicePrincipal, wszBposTenantId e cbKey quando si crea un'istanza di una struttura IPC_CREDENTIAL_SYMMETRIC_KEY .

Nota: a causa di una condizione esistente con il servizio di individuazione, vengono accettate le credenziali tramite chiave simmetrica solo se provenienti dall'America del Nord, per cui è necessario specificare direttamente l'URL del tenant. Questa operazione viene eseguita tramite il parametro pConnectionInfo , digitare IPC_CONNECTION_INFO, nelle funzioni IpcGetTemplateList o IpcGetTemplateIssuerList.

Generare una chiave simmetrica e raccogliere le informazioni necessarie

Istruzioni per generare una chiave simmetrica

Nota: per usare i cmdlet di Powershell, è necessario essere un amministratore tenant.

  • Avviare Powershell ed eseguire i comandi seguenti per generare una chiave

    Import-Module MSOnline

    Connect-MsolService (digitare le credenziali di amministratore)

    New-MsolServicePrincipal (digitare un nome visualizzato)

  • Dopo la generazione di una chiave simmetrica, verranno visualizzate le informazioni sulla chiave, tra cui la chiave stessa e 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
    

Istruzioni per individuare TenantBposId e URL

  • Installare il modulo Powershell per Azure RMS.

  • Avviare Powershell ed eseguire i comandi seguenti per ottenere la configurazione RMS del tenant.

    Import-Module AIPService

    Connect-AipService (digitare le credenziali di amministratore)

    Get-AipServiceConfiguration

  • Creare un'istanza di un IPC_CREDENTIAL_SYMMETRIC_KEY e impostare alcuni membri.

    // 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";
    

Per altre informazioni, vedere IPC_CREDENTIAL_SYMMETRIC_KEY.

  • Creare un'istanza di una struttura di IPC_CREDENTIAL contenente l'istanza di IPC_CREDENTIAL_SYMMETRIC_KEY .

    Nota: i membri di conectionInfo sono impostati con gli URL ottenuti dalla chiamata precedente a Get-AipServiceConfiguration e indicati con tali nomi di 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;
    

Identificare un modello e quindi crittografare

  • Selezionare un modello da usare per la crittografia. Chiamare IpcGetTemplateList passando la stessa istanza di 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 il modello precedente in questo argomento, chiamare IpcfEncrcyptFile, passando la stessa istanza di IPC_PROMPT_CTX.

    Esempio d’uso di IpcfEncrcyptFile:

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

    Esempio d’uso di IpcfDecryptFile:

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

La procedura necessaria per consentire all'applicazione di usare Azure Rights Management è stata completata.