如何允許您的服務應用程式使用雲端式 RMS

重要

2020 年 3 月之前發行的 Microsoft Rights Management Service SDK 版本已被取代;使用舊版的應用程式必須更新為使用 2020 年 3 月版本。 如需完整詳細資料,請參閱 淘汰通知

Microsoft Rights Management Service SDK 沒有進一步的增強功能。 我們強烈建議採用Microsoft 資訊保護 SDK來分類、標記和保護服務。

本主題概述設定服務應用程式以使用 Azure Rights Management 的步驟。 如需詳細資訊,請參閱開始使用 Azure Rights Management

重要
若要搭配 Azure RMS 使用 Rights Management Services SDK 2.1 服務應用程式,您必須建立自己的租用戶。 如需詳細資訊,請參閱 Azure RMS 需求:支援 Azure RMS 的雲端訂用帳戶

必要條件

連接到 Azure Rights Management 服務

  • 呼叫 IpcInitialize

  • 設定 IpcSetGlobalProperty

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

    注意 如需詳細資訊,請參閱 設定 API 安全性模式

  • 下列步驟是使用pcCredential ( IPC_CREDENTIAL) 成員填入 Azure Rights Management Service 連線資訊的IPC_PROMPT_CTX 結構實例的設定。

  • 使用對稱金鑰服務身分識別建立 (請參閱本主題稍早所列的必要條件,) 設定wszServicePrincipalwszBposTenantId,以及建立IPC_CREDENTIAL_SYMMETRIC_KEY結構的實例時的cbKey參數。

注意:由於探索服務的現有條件,如果您不在北美洲,因為不接受其他地區的對稱金鑰認證,所以您必須直接指定您的租用戶 URL。 這是透過pConnectionInfo參數,在IpcGetTemplateListIpcGetTemplateIssuerList函式上輸入IPC_CONNECTION_INFO來完成。

產生對稱金鑰,並收集所需的資訊

產生對稱金鑰的指示

注意:您必須是租用戶系統管理員才能使用 Powershell Cmdlet。

  • 啟動 Powershell 並執行下列命令來產生金鑰

    Import-Module MSOnline

    Connect-MsolService(請輸入您的系統管理員認證)

    New-MsolServicePrincipal(請輸入顯示名稱)

  • 在它產生對稱金鑰之後,它會輸出金鑰相關資訊,包含金鑰本身和 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
    

找出 TenantBposIdUrls 的指示

  • 安裝 Azure RMS PowerShell 模組

  • 啟動 Powershell 並執行下列命令來取得租用戶的 RMS 組態。

    Import-Module AIPService

    Connect-AipService(請輸入您的系統管理員認證)

    Get-AipServiceConfiguration

  • 建立IPC_CREDENTIAL_SYMMETRIC_KEY的實例 並設定一些成員。

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

如需詳細資訊,請參閱 IPC_CREDENTIAL_SYMMETRIC_KEY

  • 建立包含IPC_CREDENTIAL_SYMMETRIC_KEY實例之IPC_CREDENTIAL結構的實例。

    注意conectionInfo 成員會利用來自前一次 Get-AipServiceConfiguration 呼叫的 URL 進行設定,並且利用那些欄位名稱在此註明。

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

找出範本,然後加密

  • 選取用於加密的範本 呼叫傳入相同實例的 IpcGetTemplateListIPC_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);
    
  • 使用本主題稍早的範本,呼叫 IpcfEncrcyptFile,並傳入 IPC_PROMPT_CTX的相同實例。

    使用 IpcfEncrcyptFile 的範例:

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

    使用 IpcfDecryptFile 的範例:

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

您現在已完成啟用應用程式以使用 Azure Rights Management 所需的步驟。