Краткое руководство. Получение списка шаблонов защиты (C++)
В этом кратком обзоре показано, как использовать SDK MIP для защиты, чтобы получить список доступных пользователю шаблонов защиты.
Необходимые компоненты
Прежде чем продолжить, выполните следующие предварительные требования:
- Изучите статью Краткое руководство. Инициализация клиентских приложений — пакет SDK для защиты (C++), в которой показано, как создать начальное решение в Visual Studio. Чтобы правильно создать первое решение с помощью инструкций из этого краткого руководства по выводу списка шаблонов защиты, пройдите предыдущее руководство.
- (Необязательно.) Изучите понятия шаблонов RMS.
Добавление логики для перечисления шаблонов защиты
Добавьте логику для перечисления доступных пользователю шаблонов защиты, используя объект подсистемы Protection.
Откройте решение Visual Studio, созданное при работе с предыдущей статьей "Краткое руководство. Инициализация клиентских приложений — пакет SDK для защиты (C++)".
В Обозревателе решений откройте файл .cpp в проекте, содержащем реализацию метода
main()
. По умолчанию он имеет то же имя, что и содержащий его проект, который вы указали при создании проекта.Добавьте следующую директиву
using
послеusing mip::ProtectionEngine;
в верхней части файла:using std::endl;
В конце блока
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, который вы установили ранее, как описано в статье "Установка и настройка пакета SDK MIP".
Создайте файл скрипта 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
Сохраните файл скрипта, чтобы его можно было выполнить позже по запросу клиентского приложения.
Создание и тестирование приложения
Наконец, выполните сборку клиентского приложения и протестируйте его.
Нажмите клавиши CTRL+SHIFT+B (Собрать решение), чтобы выполнить сборку клиентского приложения. Если ошибок сборки нет, нажмите клавишу F5 (Начать отладку), чтобы запустить приложение.
Если проект успешно создан и запущен, приложение будет запрашивать маркер доступа каждый раз, когда пакет SDK вызывает метод
AcquireOAuth2Token()
. Вы можете повторно использовать ранее созданный маркер, если он запрашивается несколько раз и запрашиваемые значения одинаковы.Чтобы создать маркер доступа для запроса, вернитесь к скрипту PowerShell и:
Обновите переменные
$authority
и$resourceUrl
. Они должны соответствовать значениям, указанным в выходных данных консоли на шаге 2.Запустите сценарий PowerShell. Командлет
Get-ADALToken
запускает запрос проверки подлинности Microsoft Entra, аналогичный приведенному ниже примеру. Укажите ту же учетную запись, которая указана в выходных данных консоли на шаге 2. После успешного входа маркер доступа будет помещен в буфер обмена.Кроме того, вам может потребоваться предоставить разрешение на доступ приложения к API MIP во время работы с учетной записью, использовавшейся для входа. Это происходит, когда регистрация приложения Microsoft Entra не предоставляется предварительно (как описано в разделе "Настройка и настройка пакета SDK MIP") или вы входите с учетной записью из другого клиента (отличного от того, где зарегистрировано приложение). Просто щелкните Принять, чтобы записать согласие.
После вставки маркера доступа в запрос из шага 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++
Итоги | Сообщение об ошибке | Решение |
---|---|---|
Неправильный маркер доступа | Выдано исключение… Маркер доступа неправильный или истек срок его действия? Failed API call: profile_add_engine_async Failed with: [class mip::PolicySyncException] Failed acquiring policy, Request failed with http status code: 401, x-ms-diagnostics: [2000001;reason="OAuth token submitted with the request cannot be parsed.";error_category="invalid_token"], correlationId:[35bc0023-3727-4eff-8062-000006d5d672]' C:\VSProjects\MipDev\Quickstarts\AppInitialization\x64\Debug\AppInitialization.exe (process 29924) exited with code 0. Нажмите любую клавишу, чтобы закрыть это окно. . . |
Если ваш проект создан успешно, но отображается результат, аналогичный показанному слева, скорее всего, в методе AcquireOAuth2Token() используется недействительный маркер или маркер, срок действия которого истек. Вернитесь в раздел Создание скрипта PowerShell для генерации маркеров доступа, чтобы повторно создать маркер доступа, обновить AcquireOAuth2Token() и выполнить повторные сборку и тестирование. Вы также можете проверить и подтвердить маркер и его утверждения с помощью одностраничного веб-приложения jwt.ms. |
Дальнейшие действия
Теперь, когда вы узнали, как получить список шаблонов защиты, доступных пользователю, прошедшему проверку подлинности, перейдите к следующему краткому руководству:
[Шифрование и расшифровка текста](quick-protection-encrypt-decrypt text-cpp.md)