我正在 .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();
}
并在 Controller 方法中添加[Authorize]
标签。但是,我无法弄清楚如何在 Azure 函数中实现相同的功能。在这里,我目前已将授权级别设置为匿名,如下所示
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, ILogger log)
{
}
这里如何实现Azure AD身份验证?
----更新---- 添加 Tiny-wa 建议的配置后,仍然无法弄清楚为什么当我发送不记名 token 时 Api 会响应 401
最佳答案
我有一个函数包含一个http触发器,在我为该函数启用身份验证之前,我可以通过调用url直接获取响应。
我关注this document为其启用 azure 广告身份验证。
选择您的功能 -> 按进入“身份验证/授权”选项卡 -> 选中“打开”。
然后选择“使用 azure ad 登录”,点击 azure ad 作为身份验证提供商,跳转到新页面,选择 Express 并创建新的广告应用程序。
保存所有配置后,当我调用上面的网址方法时,它要求我登录。
==================================更新=============== =====================
Http触发器可以通过添加配置来设置不同的身份验证级别,这些级别设置为匿名,我们需要在请求url中添加参数。这个document提供 sample 和 this one微软提供了详细信息。
================================更新2================== ===========
我找到了另一个可能适合您的解决方案。这是sample .
在函数代码中添加身份验证模块后,您可以将该函数公开为 azure ad 中的 api。这使得您的函数应用程序使用访问 token 进行调用。当然我已经尝试过示例,这是我的经验。
首先,修改 Constants.cs 中的配置,然后创建一个 azure 广告应用并公开一个 api。接下来,添加刚才暴露的api权限。最后添加用于生成访问 token 的客户端 key 。以下是我的操作的一些屏幕截图。
关于azure - 如何使用 .NET Core 3.1 通过 Visual Studio 2019 开发 Azure Functions 时使用 AD 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65562921/