Краткое руководство. Защита веб-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. Убедитесь, что для параметра Кто может давать согласие выбран вариант Admins and users (Администраторы и пользователи).
    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: https://localhost:{port}
    ...
    

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

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

    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