如何在使用 .NET Core 3.1 通过 Visual Studio 2019 开发 Azure Functions 时使用 AD 身份验证
Posted
技术标签:
【中文标题】如何在使用 .NET Core 3.1 通过 Visual Studio 2019 开发 Azure Functions 时使用 AD 身份验证【英文标题】:How to use AD authentication while developing Azure Functions through Visual Studio 2019 using .NET Core 3.1 【发布时间】:2021-04-10 06:15:05 【问题描述】:我正在使用 .NET Core 3.1 中的 Visual Studio 2019 开发 Azure Functions。我必须为这些功能实现 Azure AD 身份验证。我知道如何在 ASP.NET Core 3.1 Web 应用程序中使用 AD 身份验证。但是由于 Azure Function 中默认没有提供启动类,那么如何实现相同的逻辑呢?
我在 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)
这里如何实现 Azure AD 身份验证?
----更新---- 添加 Tiny-wa 建议的配置后,当我发送不记名令牌时,仍然无法弄清楚为什么 Api 以 401 响应
【问题讨论】:
【参考方案1】:我有一个函数,里面有一个http触发器,在我为该函数启用认证之前,我可以通过调用url直接得到响应。
我关注 this document 为其启用 azure 广告身份验证。
选择您的功能 -> 进入身份验证/授权选项卡 -> 选中“开启”。
然后选择“使用 azure ad 登录”,单击 azure ad 作为身份验证提供者,跳转到新页面,选择 express 并创建新的广告应用程序。
保存所有配置后,当我调用上面的 url 时,它会要求我登录。
================================更新=============== ======================
Http 触发器可以通过添加配置来设置不同的授权级别,而那些设置为匿名的不同级别,我们需要在请求 url 中添加参数。这个document 提供了一个示例,来自微软的this one 提供了详细信息。
==============================update2================= =============
我找到了另一种可能适合您的解决方案。这是sample。
在函数代码中添加身份验证模块后,您可以将函数公开为 azure ad 中的 api。这会使用访问令牌调用您的函数应用。当然样品我试过了,这是我的经验。
首先,修改 Constants.cs 中的配置,然后创建一个 azure 广告应用并公开一个 api。接下来,添加刚才暴露的api权限。最后添加用于生成访问令牌的客户端密码。下面是一些关于我的操作的屏幕截图。
【讨论】:
在代码中使用什么授权级别?在 .NET Core Web 应用程序的早期,我曾经使用来自 azure 门户的令牌端点生成令牌,这给了我一个承载令牌,我将它作为授权标头传递。我正在使用范围默认的客户端凭据工作流来生成令牌。生成令牌不是问题,而是如何验证令牌以及如何在此处放置 [authorize] 标签。你能用一段工作代码解释一下吗? 正如你上面所说的'Azure中默认不提供启动类',在我看来azure函数是一个代码sn-p,所以我的想法是通过配置而不是通过代码启用身份验证。那么,您启用身份验证的目的是什么?如果只是让您租户中的一些用户可以使用此功能,那么我在答案中提供的文档可以满足您的要求。我不知道您为什么专注于编码,或者您能否提供有关您的问题的更多详细信息? 就像在 .net 核心 Web 应用程序中一样,您在希望进行身份验证的控制器方法上使用 [Authorize] 标签,而不是在不需要它们的地方使用标签。但是,如果您正在进行配置,则无法将身份验证添加到所需的控制器方法中,而是将身份验证添加到所有控制器方法中。有什么解决办法吗? 您好,根据您的回复,您可能希望设置每个触发器都有自己的身份验证级别,所以我找到了this document,它描述了如何使 http 触发器具有不同的身份验证级别。跨度> @RahulDev 有什么进展吗?你的问题解决了吗?以上是关于如何在使用 .NET Core 3.1 通过 Visual Studio 2019 开发 Azure Functions 时使用 AD 身份验证的主要内容,如果未能解决你的问题,请参考以下文章