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:

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.

  1. 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++)".

  2. 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.

  3. Adicione a seguinte diretiva using após using mip::ProtectionEngine;, próximo à parte superior do arquivo:

    using std::endl;
    
  4. Até o fim do corpo main(), embaixo do colchete de fechamento } do último bloco catch e acima de return 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".

  1. 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
    
  2. 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.

  1. 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.

  2. 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:

  3. 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.

      Visual Studio acquire token sign-in

    • 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.

      Visual Studio consent

  4. 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)