#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 Есть прогресс? И вы решили свою проблему?