Как использовать проверку подлинности AD при разработке функций Azure в Visual Studio 2019 с использованием .NET Core 3.1

#azure #azure-active-directory #azure-functions #authorization #.net-core-3.1

#azure #azure-active-directory #azure-функции #авторизация #.net-core-3.1

Вопрос:

Я разрабатываю функции Azure с использованием Visual Studio 2019 в .NET Core 3.1. Я должен реализовать проверку подлинности Azure AD для этих функций. Я знаю, как использовать проверку подлинности AD в ASP.NET Ядро 3.1 веб-приложение. Но поскольку в функции Azure по умолчанию не предусмотрен класс запуска, как реализовать ту же логику?

Я использую этот код в ASP.NET Ядро 3.1 веб-приложение:

 public void ConfigureServices(IServiceCollection services)
{
     services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(Configuration, "AzureAd");
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseAuthentication();
    app.UseAuthorization();
}
 

и добавление [Authorize] тегов в методы контроллера. Но я не могу понять, как реализовать то же самое в функции Azure. В настоящее время я установил уровень авторизации как анонимный, как показано ниже

 public async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log)
{
}
 

Как реализовать проверку подлинности Azure AD здесь?

—-ОБНОВЛЕНИЕ —- После добавления конфигураций, предложенных Tiny-wa, все еще не могу понять, почему Api отвечает 401, когда я отправляю с ним токен на предъявителя

введите описание изображения здесь

Ответ №1:

У меня есть функция, содержащая в себе http-триггер, прежде чем я включу аутентификацию для функции, я могу получить ответ напрямую, вызвав url.

И я следую этому документу, чтобы включить для него проверку подлинности azure ad.

Выберите свою функцию -> перейдите на вкладку Аутентификация / Авторизация -> установите флажок «Вкл.».

введите описание изображения здесь

Затем выберите «Войти с помощью Azure ad», выберите Azure ad в качестве поставщиков проверки подлинности, перейдите на новую страницу, выберите экспресс и создайте новое приложение ad. введите описание изображения здесь
введите описание изображения здесь

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

=============================== ОБНОВЛЕНИЕ====================================

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

введите описание изображения здесь
введите описание изображения здесь

============================= обновление 2=============================

Я нашел другое решение, которое может вам подойти. Вот пример.

После добавления модуля аутентификации в код функции вы можете предоставить эту функцию в качестве API в Azure ad. В результате приложение-функция вызывается с помощью токена доступа. Конечно, я пробовал пример, вот мой опыт.

Сначала измените конфигурацию в Constants.cs, затем создайте приложение azure ad и предоставьте api. Затем добавьте разрешение api, которое только что было открыто. Наконец, добавьте секрет клиента, который используется для генерации токена доступа. Ниже приведен скриншот моего действия.

введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь

Комментарии:

1. Какой уровень авторизации следует использовать в коде? Ранее в .NET Core web app я генерировал токен, используя конечную точку токена с портала Azure, которая выдавала мне токен-носитель, который я передавал в качестве заголовка авторизации. Для генерации токена я использовал рабочий процесс с учетными данными клиента с областью действия по умолчанию. Проблема не в генерации токена, а в том, как проверить токен и как поместить здесь теги [авторизовать]. Можете ли вы объяснить с помощью рабочего фрагмента кода.

2. Как вы сказали выше, «класс запуска по умолчанию в Azure не предоставляется», и, на мой взгляд, функция azure — это фрагмент кода, поэтому моя идея — включить аутентификацию по конфигурации, но не по коду. Итак, какова ваша цель включить проверку подлинности ? Если это просто позволяет некоторым пользователям вашего клиента использовать эту функцию, документ, который я предоставил в ответе, может соответствовать вашим требованиям. Я не знаю, почему вы сосредоточены на кодировании, или не могли бы вы предоставить более подробную информацию о вашей проблеме?

3. Точно так же, как в веб-приложении .net core, вы используете теги [Авторизовать] в методах контроллера, где вы хотите, чтобы аутентификация выполнялась, и не используете теги, где они вам не нужны. Но если вы выполняете настройку, вы не можете добавить аутентификацию к нужным методам контроллера, вместо этого вы устанавливаете аутентификацию для всех методов контроллера. Есть ли какое-либо решение для этого?

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

5. @RahulDev Есть прогресс? И вы решили свою проблему?