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


Тестирование защищенного веб-API ASP.NET Core

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

Это руководство является последней частью серии, демонстрирующей создание и тестирование защищенного веб-API, зарегистрированного в клиенте Microsoft Entra. В части 1 этой серии вы создали веб-API ASP.NET Core и защитили свои конечные точки. Теперь вы создадите упрощенное приложение управляющей программы, зарегистрируйте его в клиенте и используйте приложение управляющей программы для тестирования созданного веб-API.

Изучив это руководство, вы:

  • Зарегистрировать демон-приложение
  • Назначьте роль приложения вашему демон-приложению
  • Создание приложения управляющей программы
  • Запустите демон-программу, чтобы вызвать защищенный веб-апи

Предпосылки

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

Ниже показано, как зарегистрировать приложение управляющей программы в Центре администрирования Microsoft Entra:

  1. Войдите в центр администрирования Microsoft Entra как минимум в качестве разработчика приложений.

  2. Если у вас есть доступ к нескольким тенантам, используйте значок Настройки в верхнем меню, чтобы переключиться на внешний тенант из меню Каталоги и подписки.

  3. Перейдите к Entra ID>Регистрация приложений.

  4. Выберите + Создать регистрацию.

  5. Откроется страница "Регистрация приложения", где необходимо ввести сведения о регистрации приложения:

    1. В разделе "Имя" введите понятное имя приложения, которое будет отображаться пользователям приложения, например ciam-client-app.

    2. В разделе Поддерживаемые типы учетных записей выберите Учетные записи только в этом каталоге организации.

  6. Выберите Зарегистрировать.

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

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

  1. На странице регистрации приложений выберите созданное приложение (например, секрет клиента веб-приложения), чтобы открыть страницу обзора.
  2. В разделе Управлениевыберите Сертификаты & Секреты>Секреты клиента>Новый секрет клиента.
  3. В поле описания введите описание секрета клиента (например, секрет клиента веб-приложения ).
  4. В разделе "Срок действия" выберите срок действия, для которого секрет действителен (для правил безопасности организации), а затем нажмите кнопку "Добавить".
  5. Запишите значение секрета в поле Значение. Это значение используется для настройки на следующем шаге. Значение секрета не будет отображаться снова и не может быть извлечено никакими средствами, если вы покинете страницу сертификаты и секреты. Обязательно запишите его.

Назначьте роль приложения вашему демон-приложению

Приложения, которые сами проходят проверку подлинности без пользователя, требуют разрешения приложения (также известные как роли). Эти разрешения позволяют приложению напрямую получать доступ к ресурсам. С другой стороны, если мы тестировали API с пользователем, вошедшего в систему, мы назначим делегированные разрешения (области). Делегированные разрешения позволяют приложению действовать от имени пользователя, ограниченного правами доступа пользователя. Выполните следующие действия, чтобы назначить демон-приложению разрешения:

  1. На странице регистрации приложений выберите созданное приложение, например ciam-client-app.

  2. В разделе Управление выберите Разрешения API.

  3. В разделе Настроенные разрешения выберите Добавить разрешение.

  4. Выберите вкладку API, которые использует моя организация.

  5. В списке API выберите API, например ciam-ToDoList-api.

  6. Выберите параметр "Разрешения приложения". Мы выбираем этот параметр, так как приложение входит в систему самостоятельно, а не от имени пользователя.

  7. В списке разрешений выберите TodoList.Read.All, ToDoList.ReadWrite.All (при необходимости используйте поле поиска).

  8. Нажмите кнопку Add permissions (Добавить разрешения).

  9. На этом этапе вы правильно задали разрешения. Однако, так как приложение управляющей программы не позволяет пользователям взаимодействовать с ним, сами пользователи не могут согласиться на эти разрешения. Чтобы устранить эту проблему, администратор должен согласиться с этими разрешениями от имени всех пользователей в клиенте:

    1. Выберите "Предоставить согласие администратора" для <имени> клиента, а затем нажмите кнопку "Да".
    2. Выберите «Обновить», а затем убедитесь, что под < для обоих разрешений отображается Предоставлено для >имя вашего арендатора.

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

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

    dotnet new console -o MyTestApp
    cd MyTestApp
    
  2. Установите MSAL.NET, чтобы помочь в обработке проверки подлинности, выполнив следующую команду:

    dotnet add package Microsoft.Identity.Client
    
  3. Запустите проект API и запишите порт, на котором он работает.

  4. Откройте файл Program.cs и замените код Hello world следующим кодом.

    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var response = await client.GetAsync("http://localhost:<your-api-port>/api/todolist);
    Console.WriteLine("Your response is: " + response.StatusCode);
    

    Перейдите в корневой каталог приложения управляющей программы и запустите приложение с помощью команды dotnet run. Этот код отправляет запрос без маркера доступа. Вы увидите строку: ответ: неавторизованный в консоли.

  5. Удалите код на шаге 4 и замените приведенным ниже, чтобы протестировать API, отправив запрос с допустимым маркером доступа. Это демон-приложение использует поток клиентских учетных данных для получения токена доступа при аутентификации без взаимодействия с пользователем.

    using Microsoft.Identity.Client;
    using System;
    using System.Net.Http;
    using System.Net.Http.Headers;
    
    HttpClient client = new HttpClient();
    
    var clientId = "<your-daemon-app-client-id>";
    var clientSecret = "<your-daemon-app-secret>";
    var scopes = new[] {"api://<your-web-api-application-id>/.default"};
    var tenantId = "<your-tenant-id>";     //Use in workforce tenant configuration
    var tenantName = "<your-tenant-name>"; //Use in external tenant configuration
    var authority = $"https://login.microsoftonline.com/{tenantId}"; // Use "https://{tenantName}.ciamlogin.com" for external tenant configuration 
    
    var app = ConfidentialClientApplicationBuilder
        .Create(clientId)
        .WithAuthority(authority)
        .WithClientSecret(clientSecret)
        .Build();
    
    var result = await app.AcquireTokenForClient(new string[] { scopes }).ExecuteAsync();
    Console.WriteLine($"Access Token: {result.AccessToken}");
    
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
    var response = await client.GetAsync("http://localhost:/<your-api-port>/api/todolist");
    var content = await response.Content.ReadAsStringAsync();
    
    Console.WriteLine("Your response is: " + response.StatusCode);
    Console.WriteLine(content);
    
  6. Замените заполнители в коде идентификатором клиента приложения управляющей программы, секретом, идентификатором веб-API и именем клиента.

    • Для внешних арендаторов используйте полномочия в форме: "https://{tenantName}.ciamlogin.com/"
    • Для арендаторов из рабочей силы используйте полномочия в форме: "https://login.microsoftonline.com/{tenantId}"
  7. Перейдите в корневой каталог приложения управляющей программы и запустите приложение с помощью команды dotnet run. Этот код отправляет запрос с действительным токеном доступа. Вы увидите строку: ответ: ОК , напечатанный в консоли.