次の方法で共有


クイック スタート: クライアント アプリケーションの初期化 (C#)

このクイック スタートでは、実行時に MIP SDK .NET ラッパーによって使用されるクライアント初期化パターンを実装する方法について説明します。

このクイック スタートで説明する手順は、MIP .NET ラッパーのファイル、ポリシー、または保護 SDK を使用するすべてのクライアント アプリケーションに必要です。 このクイック スタートではファイル SDK の使用方法を示しますが、ポリシー SDK と保護 SDK を使用するクライアントにも同じパターンが適用されます。 今後のクイック スタートは、それぞれが前のクイック スタートに基づいて構築されており、これが最初のものになっているので、順次実行する必要があります。 このコードは、MIP SDK の使用を開始する方法を示すことを目的としており、 運用環境での使用を目的としたものではありません。

[前提条件]

まだ行っていない場合は、次の手順を実行してください。

Visual Studio ソリューションとプロジェクトを作成する

最初に、最初の Visual Studio ソリューションとプロジェクトを作成して構成します。このソリューションには、他のクイック スタートが作成されます。

  1. Visual Studio 2019 を開き、[ ファイル ] メニューの [ 新規作成]、[ プロジェクト] の順に選択します。 [ 新しいプロジェクト ] ダイアログで、次の手順を実行します。

    • 左側のウィンドウの [ インストール済みVisual C#] で、[ Windows デスクトップ] を選択します。

    • 中央のウィンドウで、コンソール アプリ (.NET Framework) を選択します。

    • 下部のウィンドウで、プロジェクト 場所、および含まれている ソリューション名 を適宜更新します。

    • 完了したら、右下にある [OK] ボタンをクリックします。

      Visual Studio ソリューションの作成

  2. MIP ファイル SDK の NuGet パッケージをプロジェクトに追加します。

    • ソリューション エクスプローラーで、プロジェクト ノード (上部またはソリューション ノードのすぐ下) を右クリックし、[NuGet パッケージの管理]を選択します。..:
    • [エディター グループ] タブ領域で [NuGet パッケージ マネージャー ] タブが開いたとき:
      • [参照] を選択します。
      • 検索ボックスに「Microsoft.InformationProtection」と入力します。
      • "Microsoft.InformationProtection.File" パッケージを選択します。
      • [インストール] をクリックし、[ プレビューの変更 の確認] ダイアログが表示されたら [OK] をクリックします。
  3. 上記の手順を繰り返して MIP ファイル SDK パッケージを追加しますが、代わりに "Microsoft.Identity.Client" をアプリケーションに追加します。

認証デリゲートを実装する

MIP SDK は、クラス拡張を使用して認証を実装します。この機能は、認証作業をクライアント アプリケーションと共有するメカニズムを提供します。 クライアントは、適切な OAuth2 アクセス トークンを取得し、実行時に MIP SDK に提供する必要があります。

次に、SDK の Microsoft.InformationProtection.IAuthDelegate インターフェイスを拡張し、 IAuthDelegate.AcquireToken() 仮想関数をオーバーライド/実装することで、認証デリゲートの実装を作成します。 認証デリゲートはインスタンス化され、後で FileProfile および FileEngine オブジェクトによって使用されます。

  1. Visual Studio でプロジェクト名を右クリックし、[ 追加] 、[ クラス] の順に選択します。

  2. [名前] フィールドに「AuthDelegateImplementation」と入力します。 追加をクリックします。

  3. Microsoft 認証ライブラリ (MSAL) と MIP ライブラリの using ステートメントを追加します。

    using Microsoft.InformationProtection;
    using Microsoft.Identity.Client;
    
  4. AuthDelegateImplementationを設定してMicrosoft.InformationProtection.IAuthDelegateを継承し、Microsoft.InformationProtection.ApplicationInfoのプライベート変数と同じ型を受け入れるコンストラクターを実装します。

    public class AuthDelegateImplementation : IAuthDelegate
    {
       private ApplicationInfo _appInfo;
       // Microsoft Authentication Library IPublicClientApplication
       private IPublicClientApplication _app;
       public AuthDelegateImplementation(ApplicationInfo appInfo)
       {
           _appInfo = appInfo;
       }
    
    }
    

    ApplicationInfo オブジェクトには、3 つのプロパティが含まれています。 _appInfo.ApplicationIdは、AuthDelegateImplementation クラスでクライアント ID を認証ライブラリに提供するために使用されます。 ApplicationNameApplicationVersion は、Microsoft Purview 監査レポートに表示されます。

  5. public string AcquireToken() メソッドを追加します。 このメソッドは、必要に応じて、 Microsoft.InformationProtection.Identity と 3 つの文字列 (機関 URL、リソース URI、要求) を受け入れる必要があります。 これらの文字列変数は API によって認証ライブラリに渡されるため、操作しないでください。 テナントの Azure portal からテナント GUID を入力してください。 テナント GUID 以外の文字列を編集すると、認証に失敗する可能性があります。

    public string AcquireToken(Identity identity, string authority, string resource, string claims)
    {
       var authorityUri = new Uri(authority);
       authority = String.Format("https://{0}/{1}", authorityUri.Host, "<Tenant-GUID>");
    
       _app = PublicClientApplicationBuilder.Create(_appInfo.ApplicationId).WithAuthority(authority).WithDefaultRedirectUri().Build();
       var accounts = (_app.GetAccountsAsync()).GetAwaiter().GetResult();
    
       // Append .default to the resource passed in to AcquireToken().
       string[] scopes = new string[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
       var result = _app.AcquireTokenInteractive(scopes).WithAccount(accounts.FirstOrDefault()).WithPrompt(Prompt.SelectAccount)
                  .ExecuteAsync().ConfigureAwait(false).GetAwaiter().GetResult();
    
       return result.AccessToken;
    }
    
    

次に、SDK の Microsoft.InformationProtection.IConsentDelegate インターフェイスを拡張し、 GetUserConsent()をオーバーライド/実装することで、同意デリゲートの実装を作成します。 同意デリゲートは、ファイル プロファイルオブジェクトとファイル エンジン オブジェクトによって後でインスタンス化され、使用されます。 同意デリゲートには、ユーザーが url パラメーターで使用するために同意する必要があるサービスのアドレスが提供されます。 通常、代理人は、サービスへのアクセスに対する同意をユーザーが受け入れるか拒否できるようにするフローを提供する必要があります。 このクイック スタートでは、ハード コード Consent.Accept

  1. 前に使用したのと同じ Visual Studio の "クラスの追加" 機能を使用して、別のクラスをプロジェクトに追加します。 今回は、[ クラス名] フィールドに「ConsentDelegateImplementation」と入力します。

  2. 次に、ConsentDelegateImpl.csを更新して、新しい同意デリゲート クラスを実装します。 Microsoft.InformationProtectionの using ステートメントを追加し、IConsentDelegateを継承するようにクラスを設定します。

    class ConsentDelegateImplementation : IConsentDelegate
    {
         public Consent GetUserConsent(string url)
         {
              return Consent.Accept;
         }
    }
    
  3. 必要に応じて、ソリューションをビルドして、エラーなしでコンパイルされるようにします。

MIP SDK マネージド ラッパーを初期化する

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

  2. 生成された main()の実装を削除します。

  3. マネージド ラッパーには静的クラスが含まれています。 Microsoft.InformationProtection.MIP 初期化、 MipContextの作成、プロファイルの読み込み、リソースの解放に使用されます。 File SDK 操作のラッパーを初期化するには、 MIP.Initialize()を呼び出し、 MipComponent.File を渡してファイル操作に必要なライブラリを読み込みます。

  4. Program.csのMain()で、<application-id>を前に作成した Microsoft Entra アプリケーション登録の ID に置き換えます。

using System;
using System.Threading.Tasks;
using Microsoft.InformationProtection;
using Microsoft.InformationProtection.Exceptions;
using Microsoft.InformationProtection.File;
using Microsoft.InformationProtection.Protection;

namespace mip_sdk_dotnet_quickstart
{
    class Program
    {
        private const string clientId = "<application-id>";
        private const string appName = "<friendly-name>";

        static void Main(string[] args)
        {
            //Initialize Wrapper for File SDK operations
            MIP.Initialize(MipComponent.File);
            
        }
    }
}

ファイル プロファイルとエンジンを構築する

前述のように、MIP API を使用する SDK クライアントにはプロファイル オブジェクトとエンジン オブジェクトが必要です。 ネイティブ DLL を読み込むコードを追加し、プロファイルとエンジン オブジェクトをインスタンス化して、このクイック スタートのコーディング部分を完了します。

using System;
using System.Threading.Tasks;
using Microsoft.InformationProtection;
using Microsoft.InformationProtection.File;

namespace mip_sdk_dotnet_quickstart
{
  class Program
  {
       private const string clientId = "<application-id>";
       private const string appName = "<friendly-name>";

       static void Main(string[] args)
       {
            // Initialize Wrapper for File SDK operations.
            MIP.Initialize(MipComponent.File);

            // Create ApplicationInfo, setting the clientID from Microsoft Entra App Registration as the ApplicationId.
            ApplicationInfo appInfo = new ApplicationInfo()
            {
                 ApplicationId = clientId,
                 ApplicationName = appName,
                 ApplicationVersion = "1.0.0"
            };

            // Instantiate the AuthDelegateImpl object, passing in AppInfo.
            AuthDelegateImplementation authDelegate = new AuthDelegateImplementation(appInfo);

            // Create MipConfiguration Object
            MipConfiguration mipConfiguration = new MipConfiguration(appInfo, "mip_data", LogLevel.Trace, false);

            // Create MipContext using Configuration
            MipContext mipContext = MIP.CreateMipContext(mipConfiguration);

            // Initialize and instantiate the File Profile.
            // Create the FileProfileSettings object.
            // Initialize file profile settings to create/use local state.
            var profileSettings = new FileProfileSettings(mipContext,
                                     CacheStorageType.OnDiskEncrypted,
                                     new ConsentDelegateImplementation());

            // Load the Profile async and wait for the result.
            var fileProfile = Task.Run(async () => await MIP.LoadFileProfileAsync(profileSettings)).Result;

            // Create a FileEngineSettings object, then use that to add an engine to the profile.
            // This pattern sets the engine ID to user1@tenant.com, then sets the identity used to create the engine.
            var engineSettings = new FileEngineSettings("user1@tenant.com", authDelegate, "", "en-US");
            engineSettings.Identity = new Identity("user1@tenant.com");

            var fileEngine = Task.Run(async () => await fileProfile.AddEngineAsync(engineSettings)).Result;

            // Application Shutdown
            // handler = null; // This will be used in later quick starts.
            fileEngine = null;
            fileProfile = null;
            mipContext.ShutDown();
            mipContext = null;
       }
  }
}
  1. 次の値を使用して、貼り付けたソース コードのプレースホルダーの値を置き換えます。

    Placeholder 価値 Example
    <application-id> "MIP SDK のセットアップと構成" に登録されているアプリケーションに割り当てられた Microsoft Entra アプリケーション ID (2 つのインスタンス)。 0edbblll-8773-44de-b87c-b8c6276d41eb
    <friendly-name> アプリケーションのユーザー定義のフレンドリ名。 AppInitialization
    <Tenant-GUID> Microsoft Entra テナントの Tenant-ID TenantID
  2. 次に、アプリケーションの最終的なビルドを行い、エラーを解決します。 コードが正常にビルドされます。

次のステップ

初期化コードが完了したら、次のクイック スタートに向けて準備が整いました。ここでは、MIP ファイル SDK の使用を開始します。