Тестирование защищенного API
Это руководство является последней частью серии, демонстрирующей создание и тестирование защищенного веб-API, зарегистрированного во внешнем клиенте. В части 1 этой серии вы создали веб-API ASP.NET Core и защитили свои конечные точки. На этом последнем шаге вы зарегистрируете приложение управляющей программы и протестируете API.
В этом руководстве описано следующее:
- Тестирование защищенного веб-API с помощью упрощенного приложения управляющей программы, которое вызывает веб-API
Необходимые компоненты
Руководство. Защита веб-API ASP.NET Core, зарегистрированного во внешнем клиенте
Регистрация приложения управляющей программы
Ниже показано, как зарегистрировать приложение управляющей программы в Центре администрирования Microsoft Entra:
Войдите в Центр администрирования Microsoft Entra как минимум разработчик приложений.
Если у вас есть доступ к нескольким клиентам, используйте значок параметров в верхнем меню, чтобы переключиться на внешний клиент из меню каталогов и подписок.
Перейдите к приложениям> удостоверений>Регистрация приложений.
Выберите + Создать регистрацию.
Откроется страница "Регистрация приложения", где необходимо ввести сведения о регистрации приложения:
В разделе "Имя" введите понятное имя приложения, которое будет отображаться пользователям приложения, например ciam-client-app.
В разделе Поддерживаемые типы учетных записей выберите Учетные записи только в этом каталоге организации.
Выберите Зарегистрировать.
Панель обзора приложения отображается при завершении регистрации. Запишите идентификатор каталога (клиента) и идентификатор приложения (клиента), которые будут использоваться в исходном коде приложения.
Создайте секрет клиента для зарегистрированного приложения. Приложение использует секрет клиента, чтобы подтвердить свое удостоверение при запросе маркеров.
- На странице Регистрация приложений выберите созданное приложение (например, ciam-client-app), чтобы открыть страницу обзора.
- В разделе Управление выберите Сертификаты и секреты.
- Щелкните Создать секрет клиента.
- В поле "Описание" введите описание секрета клиента (например, секрет клиента приложения ciam).
- В разделе "Срок действия" выберите срок действия, для которого секрет действителен (для правил безопасности организации), а затем нажмите кнопку "Добавить".
- Запишите значение секрета в поле Значение. Это значение будет использовано позже для конфигурации. Значение секрета не будет отображаться снова и не извлекается с помощью каких-либо средств после перехода от сертификатов и секретов. Обязательно запишите его.
Назначение роли приложения управляющей программе
Для проверки подлинности приложений требуются разрешения приложения.
На странице Регистрация приложений выберите созданное приложение, например ciam-client-app.
В разделе Управление выберите Разрешения API.
В разделе Настроенные разрешения выберите Добавить разрешение.
Щелкните вкладку API, используемые моей организацией.
В списке API выберите API, например ciam-ToDoList-api.
Выберите параметр "Разрешения приложения". Мы выбираем этот параметр в качестве самого приложения, но не от имени пользователя.
В списке разрешений выберите TodoList.Read.All, ToDoList.ReadWrite.All (при необходимости используйте поле поиска).
Нажмите кнопку Add permissions (Добавить разрешения).
На этом этапе вы правильно назначили разрешения. Однако, так как приложение управляющей программы не позволяет пользователям взаимодействовать с ним, сами пользователи не могут согласиться на эти разрешения. Чтобы устранить эту проблему, администратор должен согласиться с этими разрешениями от имени всех пользователей в клиенте:
- Выберите "Предоставить согласие администратора" для <имени> клиента, а затем нажмите кнопку "Да".
- Выберите "Обновить", а затем убедитесь, что <имя> клиента предоставлено в разделе "Состояние" для обоих разрешений.
Написание кода
Инициализация консольного приложения .NET и переход к корневой папке
dotnet new console -o MyTestApp cd MyTestApp
Установите MSAL для обработки проверки подлинности, выполнив следующую команду:
dotnet add package Microsoft.Identity.Client
Запустите проект API и запишите порт, на котором он работает.
Откройте файл Program.cs и замените код Hello world следующим кодом.
using System; using System.Net.Http; using System.Net.Http.Headers; HttpClient client = new HttpClient(); var response = await client.GetAsync("https://localhost:<your-api-port>/api/todolist"); Console.WriteLine("Your response is: " + response.StatusCode);
Перейдите в корневой каталог приложения управляющей программы и запустите приложение с помощью команды
dotnet run
. Этот код отправляет запрос без маркера доступа. Вы увидите строку: ответ: неавторизованный в консоли.Удалите код на шаге 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 tenantName= "<your-tenant-name>"; var authority = $"https://{tenantName}.ciamlogin.com/"; var app = ConfidentialClientApplicationBuilder .Create(clientId) .WithAuthority(authority) .WithClientSecret(clientSecret) .Build(); var result = await app.AcquireTokenForClient(scopes).ExecuteAsync(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken); var response = await client.GetAsync("https://localhost:44351/api/todolist"); Console.WriteLine("Your response is: " + response.StatusCode);
Перейдите в корневой каталог приложения управляющей программы и запустите приложение с помощью команды
dotnet run
. Этот код отправляет запрос с допустимым маркером доступа. Вы увидите строку: ответ: ОК , напечатанный в консоли.