Поделиться через


Руководство. Вызов защищенного веб-API из приложения управляющей программы .NET

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

В этом руководстве показано, как вызвать защищенный веб-API из приложения управляющей программы .NET. Вы включаете клиентское демон-приложение для получения токена доступа с использованием его собственной идентификации, а затем вызываете веб-API. В нашем случае мы вызываем защищенную конечную точку Microsoft Graph.

В этом руководстве;

  • Настройте демон-приложение для использования деталей регистрации приложения. Убедитесь, что приложение предоставляет разрешение User.Read.All в API Microsoft Graph.
  • Создайте демон-приложение, которое получает токен от своего имени и обращается к защищенному веб API.

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

  • .NET. В этом руководстве мы используем .NET 9.0.
  • Visual Studio Code или другой редактор кода.
  • регистрация приложения в учетной записи арендатора. Убедитесь, что у вас есть следующие сведения о регистрации приложения:
    • Идентификатор приложения (клиента) зарегистрированного клиентского веб-приложения.
    • Идентификатор каталога (клиента), где вы зарегистрировали веб-приложение.
    • Значение ключа клиента для веб-приложения, которое вы создали.

Создание приложения демона .NET

  1. Откройте терминал и перейдите в папку, в которой хотите жить проект.

  2. Инициализируйте консольное приложение .NET и перейдите в корневую папку.

    dotnet new console -n DotnetDaemon
    cd DotnetDaemon
    

Установка пакетов

Установите пакеты Microsoft.Identity.Web и Microsoft.Identity.Web.DownstreamApi:

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi

Microsoft.Identity.Web предоставляет клей между ASP.NET Core, ПО промежуточного слоя проверки подлинности и библиотекой проверки подлинности Майкрософт (MSAL) для .NET, что упрощает добавление возможностей проверки подлинности и авторизации в приложение. Microsoft.Identity.Web.DownstreamApi предоставляет интерфейс, используемый для вызова нижестоящего API.

Создайте файл appsettings.json и добавьте конфигурации регистрации

  1. Создайте файл appsettings.json в корневой папке приложения.

  2. Добавьте сведения о регистрации приложения в файл appsettings.json.

    {
        "AzureAd": {
            // "Authority": "", you can use this for customer tenants in place of Instance and TenantId values
            "Instance": "https://login.microsoftonline.com/",
            "TenantId": "Enter_the_Tenant_ID_Here",
            "ClientId": "Enter_the_Application_ID_Here",
            "ClientCredentials": [
                {
                    "SourceType": "ClientSecret",
                    "ClientSecret": "Enter_the_Client_Secret_Here"
                }
            ]
        },
        "DownstreamApi": {
            "BaseUrl": "https://graph.microsoft.com",
            "RelativePath": "/v1.0/users/",
            "RequestAppToken": true,
            "Scopes": [
                "https://graph.microsoft.com/.default"
            ]
        }
    }
    

    Замените следующие значения собственными:

    Ценность Описание
    Введите_идентификатор_приложения_здесь Идентификатор приложения (клиента) демон-приложения клиента, которое вы зарегистрировали.
    Введите_секретный_ключ_клиента_здесь Секретное значение, созданное для демон-приложения.
    Введите_идентификатор_арендатора_здесь Идентификатор клиента каталога или клиента, в котором зарегистрировано приложение.

    Заметка

    Для приложений, зарегистрированных во внешнем клиенте, можно использовать Authority и удалить как экземпляр, так и TenantId.

    "Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/". Где Enter_the_Tenant_Subdomain_Here является поддоменом клиента.

  3. Добавьте файл appsettings.json в файл проекта. Файл проекта представляет собой файл .csproj в вашем проекте. Это связано с тем, что файл необходимо скопировать в выходной каталог.

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

Получение токена доступа

  1. Откройте файл program.cs в редакторе кода и удалите его содержимое.

  2. Добавьте пакеты в файл.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Identity.Abstractions;
    using Microsoft.Identity.Web;
    
  3. Создайте экземпляр получения токена. Используйте метод GetDefaultInstance класса TokenAcquirerFactory пакета Microsoft.Identity.Web для создания экземпляра для получения токена. По умолчанию экземпляр считывает файл appsettings.json, если он существует в той же папке, что и приложение. GetDefaultInstance также позволяет добавлять службы в коллекцию служб.

    Добавьте эту строку кода в файл program.cs:

    var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
    
  4. Настройте параметры приложения так, чтобы они считывались из конфигурации, и добавьте сервис DownstreamApi. Служба DownstreamApi предоставляет интерфейс, используемый для вызова нижестоящего API. Мы вызываем эту службу DownstreamAPI в объекте конфигурации. Приложение управляющей программы считывает подчиненные конфигурации API из раздела DownstreamApiappsettings.json. По умолчанию вы получаете кэш токенов в памяти.

    Добавьте следующий фрагмент кода в файл program.cs:

    const string ServiceName = "DownstreamApi";
    
    tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
        tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
    

    Вызываемой ниже API является Microsoft Graph. В этом руководстве мы используем службу DownstreamApi. Вы также можете использовать Microsoft Graph SDK.

  5. Создайте модуль получения токенов. Это объединяет все службы, которые вы добавляете, и возвращает поставщика услуг. Используйте этого поставщика услуг, чтобы получить доступ к ресурсу API, который вы добавляете. В этом случае вы добавляете только один ресурс API в качестве подчиненной службы, к которой требуется доступ.

    Добавьте следующий фрагмент кода в файл program.cs:

    var serviceProvider = tokenAcquirerFactory.Build();
    

Вызов веб-API

  1. Добавьте код для вызова защищенного веб-API с помощью интерфейса IDownstreamApi. В этом руководстве мы вызываем конечную точку API Microsoft Graph.

  2. Добавьте этот код в файл program.cs:

    try
    {
        IDownstreamApi downstreamApi = serviceProvider.GetRequiredService<IDownstreamApi>();
    
        var response = await downstreamApi.GetForAppAsync<HttpResponseMessage>("DownstreamApi");
        var content = await response.Content.ReadAsStringAsync();
        var statusCode = response.StatusCode;
    
        Console.WriteLine($"Response status code: {statusCode}");
    
        if (!content.Any())
        {
            Console.WriteLine("There are no users to display.");
            return;
        }
    
        Console.WriteLine(content);
    }
    catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }
    

    Код вызывает конечную точку, определенную в файле appsettings.json. Метод GetForAppAsync интерфейса IDownstreamApi используется для вызова конечной точки. Приложение выполняет вызов от собственного имени. Метод возвращает объект HttpResponseMessage. Затем ответ считывается как строка и отображается в консоли.

Запустите клиентское демон-приложение

Перейдите в корневую папку приложения управляющей программы и выполните следующую команду:

dotnet run

Если все в порядке, вы увидите код состояния ответа : ОК в терминале. Если есть пользователи, пользователи отображаются в терминале, в противном случае отображается сообщение нет пользователей для отображения.

Если возникают ошибки, в терминале отображается сообщение об ошибке.

Диагностировать

В случае, если возникнут ошибки

  • Подтвердите сведения о регистрации, добавленные в файл appsettings.json.
  • Убедитесь, что в файл проекта добавлен файл appsettings.json.
  • Убедитесь, что разрешения приложения настроены правильно.