Microsoft Information Protection SDK - 同意

mip::Consent enum クラスは、アプリケーション開発者が SDK によってアクセスされるエンドポイントに基づいてカスタム同意エクスペリエンスを提供できるようにする使いやすいアプローチを実装します。 この通知により、収集されるデータ、データの削除方法、または法律やコンプライアンス ポリシーで要求されるその他の情報をユーザーに通知できます。 ユーザーが同意すると、アプリケーションを続行できます。 このデリゲートは、Active Directory Rights Management サービス (AD RMS) にアクセスしようとするときにのみ呼び出されます。 クラウド サービスにアクセスする場合には呼び出されません。 アプリケーションが AD RMS をサポートしない場合は、常に Consent.AcceptAlways を返すデリゲートを実装できます。

実装

同意は、mip::Consent基本クラスを拡張し、mip::Consent 列挙値の 1 つを返すGetUserConsent を実装することによって実装されます。

mip::Consent から派生したオブジェクトは、mip::FileProfile::Settings または mip::ProtectionProfile::Settings コンストラクターに渡されます。

ユーザーが同意の提供が必要な操作を実行すると、SDK は GetUserConsent メソッドを呼び出し、宛先 URL をパラメータとして渡します。 この方法では、ユーザーに必要な情報を表示し、サービスの使用に同意するかどうかをユーザーが決定できるようにします。

  • AcceptAlways: 同意し、決定を記憶します。
  • Accept: 1 回同意します。
  • Reject: 同意しません。

SDK がこのメソッドでユーザーの同意を要求する場合、クライアント アプリケーションはユーザーに URL を提示する必要があります。 クライアント アプリケーションは、ユーザーの同意を取得する何らかの手段を提供し、ユーザーの決定に対応する適切な Consent 列挙型を返す必要があります。

サンプル実装

class ConsentDelegateImpl final : public mip::ConsentDelegate {
public:
  ConsentDelegateImpl() = default;
  
  virtual mip::Consent GetUserConsent(const std::string& url) override;

};

SDK に同意が必要な場合、GetUserConsent メソッドが "SDK によって" 呼び出され、URL がパラメーターとして渡されます。 以下のサンプルでは、SDK を指定の URL に接続することをユーザーに通知し、コマンドライン上でユーザーにオプションを提供します。 ユーザーの選択に基づいて、ユーザーは同意を承諾または拒否し、それが SDK に渡されます。 ユーザーが同意を拒否した場合、アプリケーションは例外をスローし、保護サービスは呼び出されません。

Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
  //Print the consent URL, ask user to choose
  std::cout << "SDK will connect to: " << url << std::endl;

  std::cout << "1) Accept Always" << std::endl;
  std::cout << "2) Accept" << std::endl;
  std::cout << "3) Reject" << std::endl;
  std::cout << "Select an option: ";
  char input;
  std::cin >> input;

  switch (input)
  {
  case '1':
    return Consent::AcceptAlways;
    break;
  case '2':
    return Consent::Accept;
    break;
  case '3':
    return Consent::Reject;
    break;
  default:
    return Consent::Reject;
  }  
}

テスト中、開発中、またはクラウドベースのサービスのみを使用している場合は、基本的な ConsentDelegate を実装できます。

Consent ConsentDelegateImpl::GetUserConsent(const string& url) {
  return Consent::AcceptAlways;
}

ただし、運用環境のコードでは、地域または業務上の要件や規制に応じて、同意するかどうかの選択肢をユーザーに提示することが求められる場合があります。