Microsoft Information Protection SDK - ファイル SDK エンジンの概念

MIP ファイル SDK の mip::FileEngine は、指定された ID に代わって実行されるすべての操作へのインターフェイスを提供します。 アプリケーションにサインインするユーザーごとに 1 つのエンジンを追加します。 エンジンは、その ID のコンテキストですべての操作を実行します。

FileEngineには、認証されたユーザーのラベルの一覧表示と、ユーザーに代わってファイル操作を実行するファイル ハンドラーの作成という 2 つの主な役割があります。

  • mip::FileEngine
  • ListSensitivityLabels(): 読み込まれたエンジンのラベルの一覧を取得します。
  • CreateFileHandler(): 固有のファイルまたはストリームに対して mip::FileHandler を作成します。

ファイル エンジンを追加する

プロファイル オブジェクトとエンジン オブジェクトで説明されているように、エンジンは 2 つの状態 (CREATEDまたはLOADED) を持つことができます。 これら 2 つの状態のいずれかでない状態はあり得ません。 状態を作成して読み込むには、 FileProfile::LoadAsyncを 1 回呼び出します。 エンジンが既にキャッシュされた状態にある場合は、 LOADED。 存在しない場合は、CREATED かつ LOADED です。 CREATED は、エンジンの読み込みに必要なサービスのすべての情報がアプリケーションに含まれることを意味します。 LOADED は、エンジンを使用するために必要なすべてのデータ構造がメモリ内に存在することを意味します。

ファイル エンジンの設定を作成する

プロファイルと同様に、エンジンにも設定オブジェクトである mip::FileEngine::Settings が必要です。 このオブジェクトには、一意のエンジン識別子、 mip::AuthDelegate 実装、デバッグまたはテレメトリ用のカスタマイズ可能なクライアント データ、および必要に応じてロケールが格納されます。

ここでは、アプリケーションユーザーのアイデンティティを使用して、エンジン設定という名前のFileEngine::Settingsオブジェクトを作成します。

FileEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.
  authDelegateImpl,         // auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

この方法で engineSettings を作成する場合は、一意の engineId も明示的に設定します。

engineSettings.SetEngineId(engineId);

ユーザー名または電子メールを使用すると、ユーザーがサービスまたはアプリケーションを使用するたびに、同じエンジンが確実に読み込まれます。

また、カスタム エンジン ID を指定することもできます。

FileEngine::Settings engineSettings(
  "myEngineId",     // string
  authDelegateImpl, // auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

ベスト プラクティスとして、エンジンを関連付けられたユーザーに接続する最初のパラメーター ( id) を使用します。 メール アドレス、UPN、または Microsoft Entra オブジェクト GUID は、ID が一意であり、サービスを呼び出さずにローカル状態から読み込むことができることを確認するのに役立ちます。

ファイル エンジンを追加する

エンジンを追加するには、プロファイルの読み込みに使用される promise/future パターンに戻ります。 mip::FileProfileの約束を作成するのではなく、mip::FileEngineを使用して作成します。

  //auto profile will be std::shared_ptr<mip::FileProfile>
  auto profile = profileFuture.get();

  // Instantiate the AuthDelegate implementation.
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);

  //Create the FileEngine::Settings object
  FileEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  //Create a promise for std::shared_ptr<mip::FileEngine>
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::FileEngine>>>();

  //Instantiate the future from the promise
  auto engineFuture = enginePromise->get_future();

  //Add the engine using AddEngineAsync, passing in the engine settings and the promise
  profile->AddEngineAsync(engineSettings, enginePromise);

  //get the future value and store in std::shared_ptr<mip::FileEngine>
  auto engine = engineFuture.get();

このコードは、認証されたユーザーのエンジンをプロファイルに追加します。

機密ラベルの一覧

追加されたエンジンを使用すると、 engine->ListSensitivityLabels()を呼び出すことによって、認証されたユーザーが使用できるすべての秘密度ラベルを一覧表示できます。

ListSensitivityLabels() は、サービスから特定のユーザーについて、ラベルの一覧と各ラベルの属性を取得します。 結果は、std::shared_ptr<mip::Label> ベクトルに格納されます。

詳細については、 mip::Label クラスリファレンスを参照してください。

ListSensitivityLabels()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

または、簡単に言うと:

auto labels = engine->ListSensitivityLabels();

名前を印刷すると、アプリケーションがサービスからポリシーを正常にプルし、ラベルを取得したことが示されます。 ラベルを適用するには、ラベル識別子が必要です。 次のコードは、すべてのラベルを反復処理し、親ラベルと子ラベルごとに name と id を表示します。

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

GetSensitivityLabels()によって返されるmip::Labelのコレクションを使用して、ユーザーが使用できるすべてのラベルを表示し、選択した場合は ID を使用してファイルにラベルを適用できます。

次のステップ

プロファイルが読み込まれ、エンジンが追加され、ラベルが使用可能になったので、ファイルのラベルの読み取り、書き込み、または削除を開始するハンドラーを追加できます。 詳細については、「 MIP SDK のファイル ハンドラー」を参照してください。