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

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

注

MIP .NET Policy SDK を使用するすべてのクライアント アプリケーションには、このクイック スタートの手順が必要です。 開始する前に 、MIP SDK の設定と構成 を完了します。

前提条件

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

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

  1. Visual Studio 2022 以降を開き、[ ファイル ] メニューの [ 新規作成]、[ プロジェクト] の順に選択します。

    • コンソール アプリ (.NET 8 以降を対象とする) を選択します。
    • プロジェクトの 名前 と 場所 を指定します。
  2. MIP Policy SDK と MSAL の NuGet パッケージを追加します。

    • ソリューション エクスプローラーで、プロジェクト ノードを右クリックし、[NuGet パッケージの管理...] を選択します。
    • [参照] を選択し、検索ボックスに「Microsoft.InformationProtection」と入力して、Microsoft.InformationProtection.Policy パッケージをインストールします。
    • Microsoft.Identity.Client を検索してインストールします。

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

  1. AuthDelegateImplementationという名前の新しいクラスを追加します。

    using Microsoft.InformationProtection;
    using Microsoft.Identity.Client;
    
    public class AuthDelegateImplementation : IAuthDelegate
    {
        private ApplicationInfo _appInfo;
        private IPublicClientApplication _app;
    
        public AuthDelegateImplementation(ApplicationInfo appInfo)
        {
            _appInfo = appInfo;
        }
    
        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();
    
            string[] scopes = new string[]
            {
                resource.EndsWith('/') ? $"{resource}.default" : $"{resource}/.default"
            };
    
            var result = _app.AcquireTokenInteractive(scopes)
                .WithAccount(accounts.FirstOrDefault())
                .WithPrompt(Prompt.SelectAccount)
                .ExecuteAsync()
                .ConfigureAwait(false)
                .GetAwaiter()
                .GetResult();
    
            return result.AccessToken;
        }
    }
    
  1. ConsentDelegateImplementationという名前の新しいクラスを追加します。

    using Microsoft.InformationProtection;
    
    public class ConsentDelegateImplementation : IConsentDelegate
    {
        public Consent GetUserConsent(string url)
        {
            return Consent.Accept;
        }
    }
    

ポリシー プロファイルとエンジンを初期化する

  1. Program.csを更新してMipContextを作成し、PolicyProfileを読み込み、PolicyEngineを追加します。

    using Microsoft.InformationProtection;
    using Microsoft.InformationProtection.Policy;
    
    // Application info for Microsoft Entra app registration
    ApplicationInfo appInfo = new ApplicationInfo()
    {
        ApplicationId = "<application-id>",
        ApplicationName = "MIP SDK Policy Quickstart",
        ApplicationVersion = "1.0"
    };
    
    // Create MipConfiguration and MipContext
    var mipConfiguration = new MipConfiguration(appInfo, "mip_data", LogLevel.Trace, false, CacheStorageType.OnDiskEncrypted);
    var mipContext = MIP.CreateMipContext(mipConfiguration);
    
    // Create auth and consent delegates
    var authDelegate = new AuthDelegateImplementation(appInfo);
    var consentDelegate = new ConsentDelegateImplementation();
    
    // Create PolicyProfile
    var profileSettings = new PolicyProfileSettings(mipContext, CacheStorageType.OnDiskEncrypted);
    var profile = MIP.LoadPolicyProfileAsync(profileSettings).GetAwaiter().GetResult();
    
    // Create PolicyEngine
    var engineSettings = new PolicyEngineSettings(
        id: "<user@contoso.com>",
        authDelegate: authDelegate,
        clientData: "",
        locale: "en-US")
    {
        Identity = new Identity("<user@contoso.com>")
    };
    
    var engine = profile.AddEngineAsync(engineSettings).GetAwaiter().GetResult();
    
    Console.WriteLine("Policy engine loaded successfully.");
    
  2. ビルドとテスト。 アプリケーションは、ポリシー サービスを初期化して接続する必要があります。

次のステップ