クイック スタート: 保護テンプレートを一覧表示する (C++)

このクイック スタートでは、MIP Protection SDK を使用して、ユーザーが利用できる保護テンプレートを一覧表示します。

前提条件

先に進む前に、次の前提条件をまだ実行していない場合は完了してください。

保護テンプレートを一覧表示するためのロジックを追加する

Protection エンジン オブジェクトを使用して、ユーザーが利用できる保護テンプレートを一覧表示するロジックを追加します。

  1. 先行する "Protection SDK 向けのクライアント アプリケーションの初期化 (C++) に関するクイック スタート" で作成した Visual Studio ソリューションを開きます。

  2. ソリューション エクスプローラーを使用して、main() メソッドの実装を含むプロジェクトの .cpp ファイルを開きます。 既定の名前は、それが含まれるプロジェクトと同じであり、プロジェクトの作成時に指定したものです。

  3. ファイルの先頭付近の using mip::ProtectionEngine; の後に、次の using ディレクティブを追加します。

    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 スクリプトを使用して、AuthDelegateImpl::AcquireOAuth2Token の実装内で SDK から要求されるアクセス トークンを生成します。 このスクリプトでは、前に「MIP SDK のセットアップと構成」でインストールした ADAL.PS モジュールの Get-ADALToken コマンドレットが使用されます。

  1. PowerShell スクリプト ファイル (拡張子 .ps1) を作成し、次のスクリプトをコピーしてそのファイルに貼り付けます。

    • $authority$resourceUrl は、後で後続のセクションで更新します。
    • Microsoft Entra アプリの登録で指定した値に合うように、$appId$redirectUri を更新します。
    $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 acquire token sign-in

    • サインイン アカウントでの実行中に、アプリケーションで MIP API にアクセスできるようにすることについての同意を求められることもあります。 これは、Microsoft Entra アプリケーションの登録が (「MIP SDK のセットアップと構成」での概説どおりに) 事前に同意されていないか、別の (アプリケーションの登録先とは異なる) テナントのアカウントでサインインしているときに発生します。 [同意] をクリックして、同意を記録します。

      Visual Studio consent

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

    Note

    1 つ以上の保護テンプレートの ID (f42a3342-8706-4288-bd31-ebb85995028z など) をコピーして保存しておいてください。次のクイックスタートで使用します。

トラブルシューティング

C++ アプリケーションの実行中の問題

まとめ エラー メッセージ 解決策
不正なアクセス トークン An exception occurred... is the access token incorrect/expired? (例外が発生しました... アクセス トークンが正しくないか、有効期限が切れている可能性があります)

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]' (API 呼び出しに失敗しました: profile_add_engine_async 失敗した原因: [class mip::PolicySyncException] ポリシーの取得中にエラーが発生しました。要求が次の http 状態コードで失敗しました: 401、x-ms-diagnostics: [2000001;理由="要求と共に送信された OAuth トークンを解析できません。";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. (C:\VSProjects\MipDev\Quickstarts\AppInitialization\x64\Debug\AppInitialization.exe (process 29924) がコード 0 で終了しました。)

Press any key to close this window. (このウィンドウを閉じるには、任意のキーを押してください) 。 。
プロジェクトは正常にビルドされたが、左記のような出力が表示された場合は、おそらく、AcquireOAuth2Token() メソッドのトークンが無効であるか、有効期限が切れています。 「アクセス トークンを生成する PowerShell スクリプトを作成する」に戻ってアクセス トークンを再生成し、もう一度 AcquireOAuth2Token() を更新してから、リビルドと再テストを行います。 jwt.ms シングルページ Web アプリケーションを使用して、トークンとそのクレームを確認および検証することもできます。

次のステップ

ここでは、認証済みユーザーが利用できる保護テンプレートを一覧表示する方法について説明しました。次のクイック スタートに進みましょう。

[テキストの暗号化と暗号化解除](quick-protection-encrypt-decrypt text-cpp.md)