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


Разработка приложения

Внимание

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

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

В этом примере вы создадите простое консольное приложение, взаимодействующее со службой Azure Information Protection (AIP). Он будет принимать в качестве входных данных путь к защите документа, а затем защитить его с помощью нерегламентированной политики или шаблона Azure. Затем приложение будет применять правильные политики в соответствии с входными данными, создавая защищенный сведениями документ. Пример кода, который вы будете использовать, — это тестовое приложение Azure IP и находится на сайте Github.

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

  • Операционная система: Windows 10, Windows 8, Windows 7, Windows Server 2008, Windows Server 2008 R2 или Windows Server 2012
  • Язык программирования: C# (платформа .NET Framework 3.0 и более поздней версии)
  • Среда разработки: Visual Studio 2015 (и более поздние версии)

Настройка конфигурации Azure

Чтобы настроить Azure для этого приложения, необходимо создать идентификатор клиента, симметричный ключ и идентификатор субъекта приложения.

Конфигурация клиента Azure AD

Чтобы настроить среду Azure AD для Azure Information Protection, следуйте инструкциям в статье "Активация службы защиты из Azure Information Protection".

После активации службы потребуются компоненты PowerShell для выполнения следующих действий. Для этого выполните администрирование защиты от Azure Information Protection с помощью PowerShell .

Получение идентификатора клиента

  • В качестве администратора запустите PowerShell.
  • Импортируйте модуль RMS: Import-Module AIPService
  • Подключитесь к службе с назначенными учетными данными пользователя: Connect-AipService –Verbose
  • Убедитесь, что RMS включена: enable-aipservice
  • Получите идентификатор клиента, выполнив команду: Get-AipServiceConfiguration

Запишите значение BPOSId (идентификатор клиента). Она понадобится в дальнейшем.

Пример результатаВыходные данные командлета Get-AadrmConfiguration

  • Отключение от службы: Disconnect-AipServiceService

Создание субъекта-службы

Выполните следующие действия, чтобы создать субъект-службу:

Субъект-служба — это учетные данные, настроенные глобально для управления доступом, которые позволяют службе проходить проверку подлинности с помощью Microsoft Azure AD и защищать информацию с помощью Microsoft Azure AD Rights Management

  • Запуск PowerShell от имени администратора
  • Импорт модуля Microsoft Azure AD с помощью: Import-Module MSOnline
  • Подключитесь к веб-службе с назначенными учетными данными пользователя: Connect-MsolService
  • Создайте субъект-службу, выполнив команду: New-MsolServicePrincipal
  • Укажите имя субъекта-службы

    Запишите симметричный ключ и идентификатор субъекта приложения для дальнейшего использования.

Пример результатаВыходные данные командлета NewMsolServicePrincipal

  • Добавьте идентификатор субъекта приложения, симметричный ключ и идентификатор клиента в файл app.config приложения.

Пример файла App.configПример файла App.config

Сводка по проектированию

На следующей схеме показана архитектура и поток процессов для создаваемого приложения, описанные ниже. Сводка по проектированию

  1. Входные данные пользователя:
    • Путь к защищенному файлу
    • Выбор шаблона или создание нерегламентированной политики
  2. Приложение запрашивает проверку подлинности с помощью AIP.
  3. AIP подтверждает проверку подлинности
  4. Приложение запрашивает шаблоны из AIP.
  5. AIP возвращает предварительно определенные шаблоны.
  6. Приложение находит указанный файл с заданным расположением.
  7. Приложение применяет политику защиты AIP к файлу.

Принцип работы кода

В примере теста IP-адресов Azure решение начинается с Iprotect.cs файла. Это консольное приложение C# и, как и в любом другом приложении с поддержкой AIP, вы начинаете с загрузки MSIPC.dll , как показано в методе main() .

//Loads MSIPC.dll
SafeNativeMethods.IpcInitialize();
SafeNativeMethods.IpcSetAPIMode(APIMode.Server);

Загрузка параметров, необходимых для подключения к Azure

//Loads credentials for the service principal from App.Config
SymmetricKeyCredential symmetricKeyCred = new SymmetricKeyCredential();
symmetricKeyCred.AppPrincipalId = ConfigurationManager.AppSettings["AppPrincipalId"];
symmetricKeyCred.Base64Key = ConfigurationManager.AppSettings["Base64Key"];
symmetricKeyCred.BposTenantId = ConfigurationManager.AppSettings["BposTenantId"];

При предоставлении пути к файлу в консольном приложении приложение проверяет, зашифрован ли документ. Метод имеет класс SafeFileApiNativeMethods .

var checkEncryptionStatus = SafeFileApiNativeMethods.IpcfIsFileEncrypted(filePath);

Если документ не зашифрован, он продолжает шифровать документ с выбранным выбором, указанным в запросе.

if (!checkEncryptionStatus.ToString().ToLower().Contains(alreadyEncrypted))
{
  if (method == EncryptionMethod1)
  {
    //Encrypt a file via AIP template
    ProtectWithTemplate(symmetricKeyCred, filePath);

  }
  else if (method == EncryptionMethod2)
  {
    //Encrypt a file using ad-hoc policy
    ProtectWithAdHocPolicy(symmetricKeyCred, filePath);
  }
}

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

Если вы не изменяли шаблоны, вы получите шаблоны по умолчанию из AIP

public static void ProtectWithTemplate(SymmetricKeyCredential symmetricKeyCredential, string filePath)
{
  // Gets the available templates for this tenant
  Collection<TemplateInfo> templates = SafeNativeMethods.IpcGetTemplateList(null, false, true,
      false, true, null, null, symmetricKeyCredential);

  //Requests tenant template to use for encryption
  Console.WriteLine("Please select the template you would like to use to encrypt the file.");

  //Outputs templates available for selection
  int counter = 0;
  for (int i = 0; i < templates.Count; i++)
  {
    counter++;
    Console.WriteLine(counter + ". " + templates.ElementAt(i).Name + "\n" +
        templates.ElementAt(i).Description);
  }

  //Parses template selection
  string input = Console.ReadLine();
  int templateSelection;
  bool parseResult = Int32.TryParse(input, out templateSelection);

  //Returns error if no template selection is entered
  if (parseResult)
  {
    //Ensures template value entered is valid
    if (0 < templateSelection && templateSelection <= counter)
    {
      templateSelection -= templateSelection;

      // Encrypts the file using the selected template
      TemplateInfo selectedTemplateInfo = templates.ElementAt(templateSelection);

      string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(filePath,
          selectedTemplateInfo.TemplateId,
          SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST, true, false, true, null,
          symmetricKeyCredential);
    }
  }
}

При выборе нерегламентированной политики пользователь приложения должен предоставить сообщения электронной почты пользователей, которые будут иметь права. В этом разделе лицензия создается с помощью метода IpcCreateLicenseFromScratch() и применения новой политики к шаблону.

if (issuerDisplayName.Trim() != "")
{
  // Gets the available issuers of rights policy templates.
  // The available issuers is a list of RMS servers that this user has already contacted.
  try
  {
    Collection<TemplateIssuer> templateIssuers = SafeNativeMethods.IpcGetTemplateIssuerList(
                                                    null,
                                                    true,
                                                    false,
                                                    false, true, null, symmetricKeyCredential);

    // Creates the policy and associates the chosen user rights with it
    SafeInformationProtectionLicenseHandle handle = SafeNativeMethods.IpcCreateLicenseFromScratch(
                                                        templateIssuers.ElementAt(0));
    SafeNativeMethods.IpcSetLicenseOwner(handle, owner);
    SafeNativeMethods.IpcSetLicenseUserRightsList(handle, userRights);
    SafeNativeMethods.IpcSetLicenseDescriptor(handle, new TemplateInfo(null, CultureInfo.CurrentCulture,
                                                            policyName,
                                                            policyDescription,
                                                            issuerDisplayName,
                                                            false));

    //Encrypts the file using the ad hoc policy
    string encryptedFilePath = SafeFileApiNativeMethods.IpcfEncryptFile(
                                    filePath,
                                    handle,
                                    SafeFileApiNativeMethods.EncryptFlags.IPCF_EF_FLAG_KEY_NO_PERSIST,
                                    true,
                                    false,
                                    true,
                                    null,
                                    symmetricKeyCredential);
    }
}

Пример взаимодействия с пользователем

После получения всего созданного и выполнения выходные данные приложения должны выглядеть следующим образом:

  1. Вам будет предложено выбрать метод шифрования. Выходные данные приложения — шаг 1

  2. Вам будет предложено указать путь к защищенному файлу. Выходные данные приложения — шаг 2

  3. Вам будет предложено ввести сообщение электронной почты владельца лицензии (этот владелец должен иметь права глобального администратора в клиенте Azure AD). Выходные данные приложения — шаг 3

  4. Вы вводите адреса электронной почты пользователей, у которых есть права на доступ к файлу (сообщения электронной почты должны быть разделены пробелами). Выходные данные приложения — шаг 4

  5. Вы выбираете из списка прав, которые будут предоставлены авторизованным пользователям. Выходные данные приложения — шаг 5

  6. Наконец, введите некоторые метаданные политики: имя политики, описание и издатель (клиент Azure AD) Выходные данные приложения — шаг 6