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


Краткое руководство: список шаблонов защиты (C++).

В этом кратком руководстве показано, как использовать SDK защиты MIP для применения шаблонов защиты, доступных пользователю.

Предпосылки

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

Добавление логики для перечисления шаблонов защиты

Добавьте логику в список шаблонов защиты, доступных пользователю, с помощью объекта подсистемы защиты.

  1. Откройте решение Visual Studio, созданное в предыдущей статье "Краткое руководство . Инициализация клиентского приложения — пакет SDK для защиты (C++)".

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

  3. Добавьте следующую using директиву после using mip::ProtectionEngine;, в верхней части файла.

    using std::endl;
    
  4. Ближе к концу main() тела под закрывающей фигурной скобкой } последнего catch блока и выше return 0; (где вы остановились в предыдущей быстрой настройке), вставьте следующий код:

     // List protection templates
     const shared_ptr<ProtectionEngineObserver> engineObserver = std::make_shared<ProtectionEngineObserver>();
     // Create a context to pass to 'ProtectionEngine::GetTemplateListAsync'. That context will be forwarded to the
     // corresponding ProtectionEngine::Observer methods. In this case, we use promises/futures as a simple way to detect
     // the async operation completes synchronously.
     auto loadPromise = std::make_shared<std::promise<vector<shared_ptr<mip::TemplateDescriptor>>>>();
     std::future<vector<shared_ptr<mip::TemplateDescriptor>>> loadFuture = loadPromise->get_future();
     engine->GetTemplatesAsync(engineObserver, loadPromise);
     auto templates = loadFuture.get();
    
     cout << "*** Template List: " << endl;
    
     for (const auto& protectionTemplate : templates) {
         cout << "Name: " << protectionTemplate->GetName() << " : " << protectionTemplate->GetId() << endl;
     }
    
    

Создание скрипта PowerShell для создания маркеров доступа

Используйте следующий скрипт PowerShell для создания маркеров доступа, запрашиваемых пакетом SDK в реализации AuthDelegateImpl::AcquireOAuth2Token . Сценарий использует Get-ADALToken командлет из модуля ADAL.PS, который вы установили ранее в разделе "Установка и настройка MIP SDK".

  1. Создайте файл скрипта PowerShell (расширение.ps1) и скопируйте и вставьте следующий скрипт в файл:

    • $authority и $resourceUrl обновляются позже в следующем разделе.
    • Обновите $appId и $redirectUri, чтобы совместить их со значениями, указанными в регистрации вашего приложения Microsoft Entra.
    $authority = '<authority-url>'                   # Specified when SDK calls AcquireOAuth2Token()
    $resourceUrl = '<resource-url>'                  # Specified when SDK calls AcquireOAuth2Token()
    $appId = '<app-ID>'                              # App ID of the Azure AD app registration
    $redirectUri = '<redirect-uri>'                  # Redirect URI of the Azure AD app registration
    $response = Get-ADALToken -Resource $resourceUrl -ClientId $appId -RedirectUri $redirectUri -Authority $authority -PromptBehavior:RefreshSession
    $response.AccessToken | clip                     # Copy the access token text to the clipboard
    
  2. Сохраните файл скрипта, чтобы его можно было запустить позже, когда запрашивается клиентское приложение.

Создание и тестирование приложения

Наконец, создайте и протестируйте клиентское приложение.

  1. Используйте Ctrl+Shift+B (Сборка решения) для создания клиентского приложения. Если у вас нет ошибок сборки, используйте F5 (начать отладку) для запуска приложения.

  2. Если проект успешно выполняет сборку и запуск, приложение запрашивает маркер доступа, каждый раз, когда пакет SDK вызывает AcquireOAuth2Token() метод. Вы можете повторно использовать ранее созданный маркер, если запрашивается несколько раз, а запрошенные значения одинаковы:

  3. Чтобы создать маркер доступа для запроса, вернитесь к скрипту PowerShell и выполните следующие действия.

    • Обновите переменные $authority и $resourceUrl. Они должны соответствовать значениям, указанным в выходных данных консоли на шаге 2.

    • Запустите сценарий PowerShell. Командлет Get-ADALToken запускает запрос проверки подлинности Microsoft Entra, аналогичный приведенному ниже примеру. Укажите ту же учетную запись, указанную в выходных данных консоли на шаге 2. После успешного входа маркер доступа будет помещен в буфер обмена.

      Получение токена для входа в Visual Studio

    • Кроме того, вам может потребоваться предоставить согласие, чтобы разрешить приложению доступ к API MIP во время выполнения под учетной записью входа. Это происходит, когда регистрация приложения Microsoft Entra не предоставляется предварительно (как описано в разделе "Настройка и настройка пакета SDK MIP") или вы входите с учетной записью из другого клиента (отличного от того, где зарегистрировано приложение). Просто нажмите кнопку "Принять" , чтобы записать свое согласие.

      Согласие Visual Studio

  4. После вставки маркера доступа в запрос из шага 2 выходные данные консоли должны отображать шаблоны защиты, как показано в следующем примере:

    *** Template List:
    Name: Confidential \ All Employees : a74f5027-f3e3-4c55-abcd-74c2ee41b607
    Name: Highly Confidential \ All Employees : bb7ed207-046a-4caf-9826-647cff56b990
    Name: Confidential : 174bc02a-6e22-4cf2-9309-cb3d47142b05
    Name: Contoso Employees Only : 667466bf-a01b-4b0a-8bbf-a79a3d96f720
    
    C:\MIP Sample Apps\ProtectionQS\Debug\ProtectionQS.exe (process 8252) exited with code 0.
    To automatically close the console when debugging stops, enable Tools->Options->Debugging->Automatically close the console when debugging stops.
    
    Press any key to continue . . .
    

    Примечание.

    Скопируйте и сохраните идентификатор одного или нескольких шаблонов защиты (например, f42a3342-8706-4288-bd31-ebb85995028z), так как вы будете использовать его в следующем кратком руководстве.

Устранение неполадок

Проблемы во время выполнения приложения C++

Сводка Сообщение об ошибке Решение
Недопустимый токен доступа Произошло исключение... неправильный или истек срок действия токена доступа?

Неудачный вызов API: profile_add_engine_async завершился с ошибкой: [класс mip::PolicySyncException] Не удалось получить политику, запрос не выполнен, код состояния HTTP: 401, x-ms-diagnostics: [2000001; reason="Токен OAuth, отправленный с запросом, не может быть разобран."; error_category="invalid_token"], correlationId:[35bc0023-3727-4eff-8062-000006d5d672]

C:\VSProjects\MipDev\Quickstarts\AppInitialization\x64\Debug\AppInitialization.exe (процесс 29924) завершился с кодом 0.

Нажмите любую клавишу, чтобы закрыть это окно. . .
Если проект успешно выполняется, но вы видите такие выходные данные, как на изображении слева, скорее всего, в вашем методе AcquireOAuth2Token() используется недействительный или истекший токен. Вернитесь к шагу создания скрипта PowerShell для генерации маркеров доступа, снова создайте маркер доступа, обновите AcquireOAuth2Token(), затем перестройте и протестируйте заново. Вы также можете изучить и проверить токен и его утверждения с помощью одностраничного веб-приложения jwt.ms.

Дальнейшие шаги

Теперь, когда вы узнали, как перечислить шаблоны защиты, доступные для пользователя, прошедшего проверку подлинности, попробуйте следующее краткое руководство.

[Шифрование и расшифровка текста](быстрая защита от шифрования и расшифровки text-cpp.md)