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


Краткое руководство. Защита веб-API ASP.NET Core с помощью платформа удостоверений Майкрософт

В этом кратком руководстве используется пример кода веб-API ASP.NET Core для демонстрации ограничения доступа к ресурсам авторизованным учетным записям. В этом примере для обработки проверки подлинности используется ASP.NET Core Identity , взаимодействующий с библиотекой проверки подлинности Майкрософт (MSAL ).

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

Регистрация идентификаторов приложения и записей

Кончик

Действия, описанные в этой статье, могут немного отличаться на портале, с который вы начинаете работу.

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

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

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

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

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

  5. Введите имя приложения, например NewWebAPI1.

  6. Для поддерживаемых типов учетных записей выберите только учетные записи в этом каталоге организации. Для получения сведений о различных типах учетных записей выберите параметр "Справка".

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

    Снимок экрана: ввод имени и выбор типа учетной записи.

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

    Снимок экрана: значения идентификатора на странице обзора.

Заметка

Поддерживаемые типы учетных записей можно изменить, ссылаясь на изменение учетных записей, поддерживаемых приложением.

Предоставление API

После регистрации API можно настроить его разрешение, определив области, предоставляемые API клиентским приложениям. Клиентские приложения запрашивают разрешение на выполнение операций, передав маркер доступа вместе с его запросами к защищенному веб-API. Затем веб-API выполняет запрошенную операцию только в том случае, если полученный маркер доступа содержит необходимые области.

  1. В разделе "Управление" выберите "Предоставить область" API > "Добавить область". Примите предлагаемый URI (api://{clientId}) идентификатора приложения, нажав кнопку "Сохранить" и продолжить. Значение {clientId} , записанное на странице обзора . Затем введите следующие сведения:

    1. В поле "Имя области" введите Forecast.Read.
    2. Для того, кто может предоставить согласие, убедитесь, что выбран параметр "Администраторы и пользователи ".
    3. В поле отображаемого имени согласия администратора введите Read forecast data.
    4. В поле описания согласия администратора введите Allows the application to read weather forecast data.
    5. В поле отображаемого имени согласия пользователя введите Read forecast data.
    6. В поле описания согласия пользователя введите Allows the application to read weather forecast data.
    7. Убедитесь, что для состояния задано значение "Включено".
  2. Выберите " Добавить область". Если область введена правильно, она указана в области предоставления API .

    Снимок экрана: значения полей при добавлении области в API.

Клонирование или скачивание примера приложения

Чтобы получить пример приложения, можно клонировать его из GitHub или скачать его в виде файла .zip .

  • Чтобы клонировать пример, откройте командную строку и перейдите к месту создания проекта и введите следующую команду:

    git clone https://github.com/Azure-Samples/ms-identity-docs-code-dotnet.git
    
  • Скачайте файл .zip. Извлеките его в путь к файлу, где длина имени меньше 260 символов.

Настройка примера приложения ASP.NET Core

  1. В интегрированной среде разработки откройте папку проекта ms-identity-docs-code-dotnet /web-api, содержащую пример.

  2. Откройте appsettings.json файл, содержащий следующий фрагмент кода:

    {
      "AzureAd": {
        "Instance": "https://login.microsoftonline.com/",
        "TenantId": "Enter the tenant ID obtained from the Microsoft Entra admin center",
        "ClientId": "Enter the client ID obtained from the Microsoft Entra admin center",
        "Scopes": "Forecast.Read"
      },
      "Logging": {
        "LogLevel": {
          "Default": "Information",
          "Microsoft.AspNetCore": "Warning"
        }
      },
      "AllowedHosts": "*"
    }
    

    Найдите следующее key:

    • ClientId — идентификатор приложения, который также называется клиентом. Замените value текст в кавычках идентификатором приложения (клиента), записанным ранее на странице обзора зарегистрированного приложения.
    • TenantId — идентификатор клиента, в котором зарегистрировано приложение. Замените value текст в кавычках значением идентификатора каталога (клиента), записанным ранее на странице обзора зарегистрированного приложения.

Запуск примера приложения

  1. Выполните следующую команду, чтобы запустить приложение:

    dotnet run
    
  2. Отображаются выходные данные, как показано в следующем примере:

    ...
    info: Microsoft.Hosting.Lifetime[14]
          Now listening on: http://localhost:{port}
    ...
    

    Запишите номер порта в URL-адресе http://localhost:{port} .

  3. Чтобы убедиться, что конечная точка защищена, обновите базовый URL-адрес в следующей команде cURL, чтобы она соответствовала полученной на предыдущем шаге, а затем выполните команду:

    curl -X GET https://localhost:5001/weatherforecast -ki
    

    Ожидаемый ответ — 401 Неавторизованный с выходными данными, похожими на следующие:

    user@host:~$ curl -X GET https://localhost:5001/weatherforecast -ki
    HTTP/2 401
    date: Fri, 23 Sep 2023 23:34:24 GMT
    server: Kestrel
    www-authenticate: Bearer
    content-length: 0
    

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

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