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

如何在通过Visual Studio 2019使用.NET Core 3.1开发Azure功能时使用AD身份验证,azure,azure-active-directory,azure-functions,authorization,.net-core-3.1,Azure,Azure Active Directory,Azure Functions,Authorization,.net Core 3.1,我正在使用.NETCore3.1中的VisualStudio2019开发Azure函数。我必须为这些功能实现Azure AD身份验证。我知道如何在ASP.NET Core 3.1 web应用程序中使用广告身份验证。但是,由于Azure函数中默认不提供启动类,如何实现相同的逻辑 我正在ASP.NET Core 3.1 web应用程序中使用以下代码: public void ConfigureServices(IServiceCollection services) { services.

我正在使用.NETCore3.1中的VisualStudio2019开发Azure函数。我必须为这些功能实现Azure AD身份验证。我知道如何在ASP.NET Core 3.1 web应用程序中使用广告身份验证。但是,由于Azure函数中默认不提供启动类,如何实现相同的逻辑

我正在ASP.NET Core 3.1 web应用程序中使用以下代码:

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)
{
}
公共异步任务运行(
[HttpTrigger(AuthorizationLevel.Anonymous,“get”,Route=null)]HttpRequest请求,ILogger日志)
{
}
如何在这里实现Azure AD身份验证

----更新---- 在添加Tiny wa建议的配置后,仍然无法理解为什么当我发送承载令牌时Api会响应401


我有一个函数包含一个http触发器,在我为该函数启用身份验证之前,我可以通过调用url直接获得响应

并且我会按照下面的步骤为它启用azure ad身份验证

选择您的功能->进入身份验证/授权选项卡->选中“开启”

然后选择“使用azure ad登录”,单击azure ad作为身份验证提供商,跳转到新页面,选择express并创建新的广告应用程序。

保存所有配置后,当我调用上述url时,它会要求我登录

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

Http触发器可以通过添加配置来设置不同的身份验证级别,而那些将不同级别设置为匿名的,我们需要在请求url中添加参数。这提供了一个示例,microsoft提供了详细信息

========================================更新2=============================

我找到了另一个可能适合你的解决办法。这是我的建议

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

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


在代码中使用什么授权级别?在.NET Core web app的早期,我使用azure portal中的令牌端点生成令牌,该端点给了我一个承载令牌,我将其作为授权头传递。我使用范围默认的客户端凭据工作流来生成令牌。生成令牌不是问题,而是如何验证令牌以及如何在此处放置[authorize]标记。你能用一段工作代码解释一下吗?正如你上面所说的“Azure中默认不提供启动类”,我认为Azure函数是一个代码片段,所以我的想法是通过配置而不是代码来启用身份验证。那么,启用身份验证的目的是什么?如果只是让租户中的一些用户可以使用此功能,那么我在回答中提供的文档可以满足您的要求。我不知道你为什么要专注于编码,或者你能提供更多关于你的问题的细节吗?就像在.net核心Web应用程序中,你在控制器方法上使用[Authorize]标记,在你希望进行身份验证的地方,而不是在你不想要的地方使用标记。但是,如果您正在进行配置,则不能向所需的控制器方法添加身份验证,而是将身份验证放在所有控制器方法上。有什么解决方案吗?祝您愉快,您的回答是,您可能希望设置每个触发器都有自己的身份验证级别,因此我发现,它描述了如何使http触发器具有不同的身份验证级别。@RahulDev有什么进展吗?你的问题解决了吗?