Início rápido: listar modelos de proteção (C++)
Este início rápido mostra como usar o SDK de Proteção da PIM para modelos de proteção disponíveis ao usuário.
Pré-requisitos
Conclua os seguintes pré-requisitos antes de continuar, caso ainda não tenha feito isso:
- Conclua primeiro o Início rápido – Inicialização do aplicativo cliente – SDK de proteção (C++), que cria uma solução inicial do Visual Studio. Este início rápido "Listar modelos de proteção" depende do anterior para a criação adequada da solução inicial.
- Opcionalmente: examine os conceitos de modelos de RMS.
Adicionar lógica para listar os modelos de proteção
Adicione lógica para listar os modelos de proteção disponíveis para um usuário usando o objeto Mecanismo de proteção.
Abra a solução do Visual Studio que você criou no artigo anterior "Início Rápido – Inicialização do aplicativo cliente – SDK de proteção (C++)".
Usando o Gerenciador de Soluções, abra o arquivo .cpp no projeto que contém a implementação do método
main()
. Ele usa como padrão o mesmo nome que o projeto em que está contido, que você especificou durante a criação do projeto.Adicione a seguinte diretiva
using
apósusing mip::ProtectionEngine;
, próximo à parte superior do arquivo:using std::endl;
Até o fim do corpo
main()
, embaixo do colchete de fechamento}
do último blococatch
e acima dereturn 0;
(no ponto em que você parou no início rápido anterior), insira o seguinte código:// 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; }
Criar um script do PowerShell para gerar tokens de acesso
Use o script do PowerShell a seguir para gerar tokens de acesso, que são solicitados pelo SDK na sua implementação de AuthDelegateImpl::AcquireOAuth2Token
. O script usa o cmdlet Get-ADALToken
do módulo ADAL.PS que você instalou anteriormente, em "Configuração e instalação do SDK da PIM".
Crie um arquivo de script do PowerShell (extensão .ps1) e copie e cole o seguinte script no arquivo:
$authority
e$resourceUrl
são atualizados mais tarde, na seção a seguir.- Atualize
$appId
e$redirectUri
para que correspondam aos valores especificados por você no registro do seu aplicativo do 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
Salve o arquivo de script para poder executá-lo posteriormente quando solicitado pelo aplicativo cliente.
Criar e testar o aplicativo
Por fim, crie e teste o seu aplicativo cliente.
Use Ctrl+Shift+b (Compilar Solução) para criar o aplicativo cliente. Se não houver erros de build, use F5 (Iniciar depuração) para executar o aplicativo.
Se o projeto for compilado e executado com êxito, o aplicativo solicitará um token de acesso cada vez que o SDK chamar seu método
AcquireOAuth2Token()
. Será possível reutilizar um token gerado anteriormente se solicitado várias vezes e se os valores solicitados forem os mesmos:Para gerar um token de acesso para o prompt, retorne ao seu script do PowerShell e:
Atualize as variáveis
$authority
e$resourceUrl
. Elas devem corresponder aos valores especificados na saída do console na etapa 2.Execute o script do PowerShell. O cmdlet
Get-ADALToken
dispara um prompt de autenticação do Microsoft Entra semelhante ao exemplo abaixo. Especifique a mesma conta fornecida na saída do console na etapa 2. Após uma conexão bem-sucedida, o token de acesso será colocado na área de transferência.Talvez você também precise dar consentimento para permitir que o aplicativo acesse as APIs da PIM, enquanto estiver em execução na conta de entrada. Isso ocorre quando o registro de aplicativo do Microsoft Entra não tem consentimento prévio (conforme descrito em "Configuração e instalação do SDK da PIM") ou quando você está se conectando usando a conta de outro locatário (diferente daquele em que seu aplicativo está registrado). Basta clicar em Aceitar para registrar seu consentimento.
Depois de colar o token de acesso no prompt da etapa 2, a saída do console deve mostrar os modelos de proteção, semelhante ao seguinte exemplo:
*** 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 . . .
Observação
Copie e salve a ID de um ou mais modelos de proteção (por exemplo,
f42a3342-8706-4288-bd31-ebb85995028z
) para usar no próximo início rápido.
Solução de problemas
Problemas durante a execução do aplicativo C++
Resumo | Mensagem de erro | Solução |
---|---|---|
Token de acesso inválido | Ocorreu uma exceção... o token de acesso está incorreto/expirado? Chamada à API com falha: profile_add_engine_async falhou com: [class mip::PolicySyncException] Falha na aquisição de política, Falha na solicitação com o código de status http: 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 (processo 29924) saiu com o código 0. Pressione qualquer tecla para fechar essa janela. . . |
Se o projeto foi compilado com sucesso, mas você viu uma saída semelhante à da esquerda, provavelmente você tem um token inválido ou expirado em seu método AcquireOAuth2Token() . Volte para Criar um script do PowerShell para gerar tokens de acesso e gere novamente o token de acesso, atualize AcquireOAuth2Token() outra vez e recompile/teste de novo. Você também pode examinar e verificar o token e suas declarações usando o aplicativo Web de página única jwt.ms. |
Próximas etapas
Agora que você aprendeu a listar os modelos de proteção disponíveis para um usuário autenticado, vá para o próximo início rápido:
[Criptografar e descriptografar texto](quick-protection-encrypt-decrypt text-cpp.md)