如何在 Visual Studio 2019 使用 .NET Core 3.1 开发 Azure Functions 时使用 AD 身份验证

How to use AD authentication while developing Azure Functions through Visual Studio 2019 using .NET Core 3.1

我正在 .NET Core 3.1 中使用 Visual Studio 2019 开发 Azure Functions。我必须为这些功能实施 Azure AD 身份验证。我知道如何在 ASP.NET Core 3.1 网络应用程序中使用 AD 身份验证。但是由于Azure Function中没有默认提供启动class,如何实现相同的逻辑?

我在 ASP.NET Core 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 响应

我有一个包含 http 触发器的函数,在我为该函数启用身份验证之前,我可以通过调用 url.

直接获得响应

然后我按照this document为它启用了azure ad认证。

选择您的功能 -> 按进入 Authentication/Authorization 选项卡 -> 检查 'On'.

然后选择'Log in with azure ad',点击azure ad作为Authentication providers,跳转到一个新的页面,选择express,新建一个广告应用。

保存所有配置后,当我调用上面的url方法时,它要求我登录。

===============================更新============= =======================

Http trigger 可以通过添加配置来设置不同的授权级别,那些设置不同级别的匿名,我们需要在请求中添加参数url。此 document offers a sample and this one 来自 Microsoft 提供了详细信息。

=============================update2=============== ==============

我找到了另一个可能适合您的解决方案。这是 sample.

在函数代码中添加身份验证模块后,您可以在 azure ad 中将函数公开为 api。这会使您的函数应用程序使用访问令牌进行调用。当然我已经尝试过示例,这是我的经验。

首先,修改 Constants.cs 中的配置,然后创建一个 azure ad 应用程序并公开一个 api。接下来,添加刚才暴露的api权限。最后添加用于生成访问令牌的客户端密码。下面是一些关于我的操作的截图。