Поделиться через


Практическое руководство. Настройка приложения-службы для работы с облачными службами RMS

Важно!

Версии пакета SDK службы microsoft Rights Management, выпущенные до марта 2020 г., устарели; Для использования выпуска за март 2020 г. необходимо обновить приложения, использующие более ранние версии. Подробные сведения см. в уведомлении об устаревании.

Для пакета SDK службы Microsoft Rights Management не планируется никаких дополнительных улучшений. Настоятельно рекомендуем внедрить пакет SDK для Microsoft Information Protection для служб классификации, маркировки и защиты.

В этой статье описаны действия по настройке приложения-службы для начала использования служб управления правами Azure. Дополнительные сведения см. в статье Начало работы со службой Azure Rights Management.

Важно
Чтобы использовать приложение-службу с пакетом SDK 2.1 для службы RMS с Azure RMS, вам потребуется создать собственные клиенты. Дополнительные сведения см. в статье "Требования Azure RMS: облачные подписки, поддерживающие Azure RMS"

Предварительные требования

  • Установленный и настроенный пакет SDK 2.1 для службы RMS. Дополнительные сведения см. в статье Начало работы.
  • Вам необходимо создать удостоверение службы ACS с помощью параметра симметричного ключа (или иным способом) и записать полученные данные ключа.

Подключение к службе управления правами Azure

  • Вызовите IpcInitialize.

  • Установите свойство IpcSetGlobalProperty.

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

    Примечание Дополнительные сведения см. в разделе "Настройка режима безопасности API"

  • Ниже приведены шаги по созданию экземпляра структуры IPC_PROMPT_CTX с помощью элемента pcCredential (IPC_CREDENTIAL), заполненного сведениями о подключении из службы Azure Rights Management.

  • Используйте сведения из создания удостоверения службы симметричного ключа (см. предварительные требования, перечисленные ранее в этом разделе), чтобы задать параметры wszServicePrincipal, wszBposTenantId и cbKey при создании экземпляра структуры IPC_CREDENTIAL_SYMMETRIC_KEY .

Примечание. Из-за имеющейся в нашей службе обнаружения проблемы невозможно указать учетные данные из других регионов, если вы находитесь не в Северной Америке. В этом случае вам потребуется указать прямые URL-адреса клиентов. Это делается с помощью параметра pConnectionInfo , типа IPC_CONNECTION_INFO, в функциях IpcGetTemplateList или IpcGetTemplateIssuerList.

Создание симметричного ключа и сбор необходимой информации

Инструкции по созданию симметричного ключа

Примечание. Для запуска командлетов PowerShell необходимо быть администратором клиента.

  • Запустите 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
    

Инструкции по получению TenantBposId и URL-адресов

  • Установите модуль PowerShell для Azure RMS.

  • Запустите 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 , содержащей экземпляр IPC_CREDENTIAL_SYMMETRIC_KEY .

    Примечание. Элементам connectionInfo присваиваются значения URL-адресов, полученные при предыдущем вызове Get-AipServiceConfiguration. Они приведены в этом примере с именами соответствующих полей.

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

Определение шаблона с последующим шифрованием

  • Выберите шаблон, используемый для шифрования. Вызовите IpcGetTemplateList, передавая тот же экземпляр 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);
    
  • В шаблоне, приведенном ранее в этом разделе, вызовите 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 в вашем приложении.