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

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

Замечание

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

Необходимые условия

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

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

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

    • Выберите консольное приложение (нацеливание на .NET 8 или более поздней версии).
    • Укажите имя и расположение проекта.
  2. Установите пакеты NuGet для MIP Policy SDK и MSAL.

    • В Обозреватель решений щелкните правой кнопкой мыши узел проекта и выберите пункт "Управление пакетами 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. Сборка и тестирование. Приложение должно инициализировать и подключиться к службе политики.

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