Настройка приложений управляющей программы, вызывающих веб-API

Узнайте, как настроить код для управляющей программы, вызывающей веб-API.

Библиотеки Майкрософт, поддерживающие управляющие программы

Управляющие программы поддерживаются следующими библиотеками Майкрософт:

Язык или платформа Проект на сайте
GitHub
Пакет Получение
из этих вариантов
Выполнение входа пользователей Доступ к веб-API Общедоступная версия (GA) или
Общедоступная предварительная версия1
.NET MSAL для .NET Microsoft.Identity.Client Краткое руководство Библиотека не может запрашивать маркеры идентификаторов для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Java MSAL4J msal4j Библиотека не может запрашивать маркеры идентификаторов для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Узел Узел MSAL msal-node Краткое руководство Библиотека не может запрашивать маркеры идентификаторов для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия
Python MSAL Python msal-python Краткое руководство Библиотека не может запрашивать маркеры идентификаторов для входа пользователя. Библиотека может запросить маркеры доступа для защищенных веб-API. Общедоступная версия

1Универсальные условия лицензионного соглашения для веб-служб применяются к библиотекам в общедоступной предварительной версии.

Настройка прав

Управляющие программы используют разрешения приложений, а не делегированные разрешения. Поэтому поддерживаемый ими тип учетной записи не может быть учетной записью в любом каталоге организации или личной учетной записью Майкрософт (например, Skype, Xbox, Outlook.com). Администратора клиентов для предоставления согласия управляющей программе для личной учетной записи Майкрософт не существует. Вам нужно выбрать учетные записи в моей организации или учетных записях в любой организации.

Центр, указанный в конфигурации приложения, должен быть арендован (указано идентификатор клиента или доменное имя, связанное с вашей организацией).

Даже если вы хотите предоставить мультитенантное средство, следует использовать идентификатор клиента или доменное имя, а неcommonorganizations с этим потоком, так как служба не может надежно определить, какой клиент следует использовать.

Настройка и создание экземпляра приложения

В библиотеках MSAL учетные данные клиента (секрет или сертификат) передаются в качестве параметра для создания конфиденциального клиентского приложения.

Внимание

Даже если приложение является консольным и работает как служба, то, если это управляющее приложение, оно должно быть конфиденциальным клиентским приложением.

Файл конфигурации

Файл конфигурации определяет:

  • Облачный экземпляр и идентификатор клиента, которые вместе образуют права.
  • Идентификатор клиента, полученный при регистрации приложения.
  • Секрет клиента или сертификат.

Ниже приведен пример определения конфигурации в файле appsettings.js. Этот пример взят из примера кода управляющей программы консоли .NET на GitHub.

{
    "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
        "ClientId": "[Enter here the ClientId for your application]",
        "ClientCredentials": [
            {
                "SourceType": "ClientSecret",
                "ClientSecret": "[Enter here a client secret for your application]"
            }
        ]
    }
}

Вы предоставляете сертификат вместо секрета клиента или учетные данные федерации удостоверений рабочей нагрузки.

Создание экземпляра приложения MSAL

Чтобы создать экземпляр приложения MSAL, добавьте, вызовите или импортируйте пакет MSAL (в зависимости от языка).

Конструкция отличается в зависимости от того, используете вы клиентские секреты или сертификаты (или, в качестве расширенного сценария, подписанные утверждения).

Ссылка на пакет

Ссылка на пакет MSAL в коде приложения.

Добавьте в приложение пакет NuGet Microsoft.Identity.Web.TokenAcquisition. Кроме того, если вы хотите вызвать Microsoft Graph, добавьте пакет Microsoft.Identity.Web.GraphServiceClient . Проект может быть следующим образом. Файл appsettings.json необходимо скопировать в выходной каталог.

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net7.0</TargetFramework>
    <RootNamespace>daemon_console</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Identity.Web.GraphServiceClient" Version="2.12.2" />
  </ItemGroup>

  <ItemGroup>
    <None Update="appsettings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
  </ItemGroup>
</Project>

В файле Program.cs добавьте директиву using в код для ссылки на Microsoft.Identity.Web.

using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

Создание экземпляра конфиденциального клиентского приложения с секретом клиента

Вот код для создания экземпляра конфиденциального клиентского приложения с секретом клиента:

   class Program
    {
        static async Task Main(string[] _)
        {
            // Get the Token acquirer factory instance. By default it reads an appsettings.json
            // file if it exists in the same folder as the app (make sure that the 
            // "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
            TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

            // Configure the application options to be read from the configuration
            // and add the services you need (Graph, token cache)
            IServiceCollection services = tokenAcquirerFactory.Services;
            services.AddMicrosoftGraph();
            // By default, you get an in-memory token cache.
            // For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

            // Resolve the dependency injection.
            var serviceProvider = tokenAcquirerFactory.Build();

            // ...
        }
    }

Конфигурация считывается из appsettings.json:

Создание экземпляра конфиденциального клиентского приложения с сертификатом клиента

Ниже приведен код для создания приложения с сертификатом.

Сам код точно такой же. Сертификат описан в конфигурации. Существует множество способов получения сертификата. Дополнительные сведения см. в разделе https://aka.ms/ms-id-web-certificates. Вот как вы будете делать, чтобы получить сертификат из KeyVault. Удостоверений Майкрософт делегирует удостоверение Azure DefaultAzureCredential и использует управляемое удостоверение, если он доступен для доступа к сертификату из KeyVault. Вы можете отлаживать приложение локально, так как затем использует учетные данные разработчика.

  "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://yourKeyVaultUrl.vault.azure.net",
        "KeyVaultCertificateName": "NameOfYourCertificate"
      }

Расширенный сценарий: создание экземпляра конфиденциального клиентского приложения с утверждениями клиента

Помимо использования секрета клиента или сертификата конфиденциальные клиентские приложения также могут подтвердить свою личность с помощью утверждений клиента. Дополнительные сведения см. в разделе CredentialDescription .

Следующие шаги

Перейдите к следующей статье в этом сценарии, чтобы получить маркер для приложения.