Краткое руководство: Инициализация клиентского приложения (C#)

В этом кратком руководстве показано, как реализовать шаблон инициализации клиента, который обёртка .NET для пакета SDK MIP использует во время выполнения.

Замечание

Любому клиентскому приложению, использующему пакеты SDK File, Policy или Protection оболочки MIP .NET, необходимо выполнить шаги, описанные в этом кратком руководстве. Хотя в этом кратком руководстве показано использование пакетов SDK для файлов, этот же шаблон применяется к клиентам, используюющим пакеты SDK политики и защиты. Проходите последующие краткие руководства по порядку, поскольку каждое из них опирается на предыдущее, а это руководство является первым. Этот код предназначен для демонстрации начала работы с пакетом SDK MIP и не предназначен для использования в рабочей среде.

Предпосылки

Если вы еще не сделали этого, обязательно выполните следующие действия.

Создание решения и проекта Visual Studio

Сначала создайте и настройте первоначальные решение и проект Visual Studio, на основе которых строятся другие краткие руководства.

  1. Откройте Visual Studio 2022 или более поздней версии, выберите меню "Файл ", "Создать", " Проект". В диалоговом окне "Новый проект ":

    • В области слева в разделе "Установлен", Visual C# выберите "Рабочий стол Windows".

    • На центральной панели выберите Console App (для .NET 8 или более поздней версии).

    • В нижней области обновите имя проекта, расположение и соответствующее имя содержащего решения .

    • По завершении нажмите кнопку "ОК " в правом нижнем углу.

      Создание решения в Visual Studio.

  2. Добавьте пакет NuGet для пакета SDK для файлов MIP в проект:

    • В Обозревателе решений щелкните правой кнопкой мыши по узлу проекта (непосредственно под верхним узлом или узлом решения) и выберите "Управление пакетами NuGet..."
    • Когда откроется вкладка Диспетчер пакетов NuGet в области вкладок группы редакторов:
      • Выберите Обзор.
      • В поле поиска введите "Microsoft.InformationProtection".
      • Выберите пакет Microsoft.InformationProtection.File.
      • Нажмите кнопку "Установить", а затем нажмите кнопку "ОК" при отображении диалогового окна подтверждения изменений предварительного просмотра .
  3. Повторите описанные выше действия для добавления пакета ПАКЕТА SDK для файлов MIP, но вместо этого добавьте в приложение "Microsoft.Identity.Client".

Внедрить делегата проверки подлинности

Пакет SDK MIP реализует проверку подлинности с помощью расширяемости класса, который предоставляет механизм совместного использования проверки подлинности с клиентским приложением. Клиент должен получить подходящий маркер доступа OAuth2 и предоставить его пакету SDK MIP во время выполнения.

Теперь создайте реализацию для делегата проверки подлинности, расширив интерфейс пакета SDK Microsoft.InformationProtection.IAuthDelegate и переопределяя или реализуя виртуальную IAuthDelegate.AcquireToken() функцию. Объекты FileProfile и FileEngine позже создают экземпляр и используют делегат аутентификации.

  1. Щелкните правой кнопкой мыши имя проекта в Visual Studio, выберите "Добавить" и "Класс".

  2. В поле "Имя " введите "AuthDelegateImplementation". Нажмите кнопку Добавить.

  3. Добавьте директивы using для библиотеки аутентификации Microsoft (MSAL) и библиотеки MIP:

    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 содержит три свойства. Класс AuthDelegateImplementation используется _appInfo.ApplicationId для предоставления идентификатора клиента библиотеке проверки подлинности. ApplicationName и ApplicationVersion отображаются в отчетах аудита Microsoft Purview.

  5. public string AcquireToken() Добавьте метод. Этот метод должен принимать Microsoft.InformationProtection.Identity, а также три строки: URL-адрес полномочий, URI ресурса и утверждения, если требуется. API передает эти строковые переменные в библиотеку проверки подлинности и не следует управлять ими. Введите GUID клиента на портале Azure для вашего клиента. Изменение строк, отличных от 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(). Профиль File и объекты механизма File создают экземпляр делегата согласия и позже используют его. Делегат согласия получает адрес службы, которую пользователь должен согласиться использовать в параметре url . Как правило, делегат должен предоставить поток, позволяющий пользователю принять или отклонить согласие на доступ к службе. В этом кратком руководстве описан жесткий код Consent.Accept.

  1. Используя ту же функцию Visual Studio "Добавить класс", которую мы использовали ранее, добавьте другой класс в проект. В этот раз введите "ConsentDelegateImplementation" в поле «Имя класса».

  2. Теперь обновите ConsentDelegateImpl.cs , чтобы реализовать новый класс делегата согласия. Добавьте инструкцию using для Microsoft.InformationProtection и установите класс для наследования IConsentDelegate.

    class ConsentDelegateImplementation : IConsentDelegate
    {
         public Consent GetUserConsent(string url)
         {
              return Consent.Accept;
         }
    }
    
  3. При необходимости попытайтесь создать решение, чтобы убедиться, что он компилируется без ошибок.

Инициализация управляемой оболочки MIP SDK

  1. В обозревателе решений откройте файл .cs в проекте, который содержит реализацию Main() метода. По умолчанию используется то же имя, что и проект, содержащий его, указанный во время создания проекта.

  2. Удалите созданную реализацию main().

  3. Управляемая оболочка включает статический класс Microsoft.InformationProtection.MIP, используемый для инициализации, создания MipContext, загрузки профилей и освобождения ресурсов. Чтобы инициализировать оболочку SDK для работы с файлами, вызовите MIP.Initialize(), передавая MipComponent.File для загрузки необходимых библиотек.

  4. В Main()Program.cs добавьте следующий код, заменив <идентификатор> приложения идентификатором созданной ранее регистрации приложений Microsoft Entra.

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);
            
        }
    }
}

Создание профиля файла и движка

Как упоминалось, для клиентов SDK, использующих API MIP, требуются объекты профиля и ядра. Завершите раздел этого краткого руководства, посвящённый коду, добавив код для загрузки нативных 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. Замените значения-заполнители в исходном коде, который вы вставили, используя следующие значения:

    Замещающее поле Ценность Пример
    <идентификатор приложения> Идентификатор приложения Microsoft Entra, назначенный приложению, зарегистрированным в разделе "Настройка и конфигурация пакета SDK MIP" (2 экземпляра). 00001111-aaaa-2222-bbbb-3333cccc4444
    <понятное имя> Пользовательское понятное имя для вашего приложения. Инициализация приложения
    <GUID арендатора> Идентификатор клиента для вашего Microsoft Entra клиента. TenantID
  2. Теперь выполните окончательную сборку приложения и устраните все ошибки. Код должен успешно выполнить сборку.

Дальнейшие действия

Теперь, когда код инициализации завершен, вы готовы к следующему краткому руководству, где вы начнете работать с пакетами SDK для файлов MIP.