gpt4 book ai didi

azure - Swagger UI 页面的隔离 Azure Function 绕过身份验证中间件

转载 作者:行者123 更新时间:2023-12-02 22:59:42 25 4
gpt4 key购买 nike

我创建了一个新的 .NET 6 独立 Azure Functions。我已经为 Swagger/OpenAPI 添加了特定的 Nuget 包(用于独立):

Microsoft.Azure.Functions.Worker.Extensions.OpenApi v1.3.0

然后,我使用适当的 [OpenApiOperation] 属性装饰我的 HttpTrigger 函数,并在我的 Program.cs 中正确添加 ConfigureOpenApi() 方法像这样:

using Microsoft.Azure.Functions.Worker.Extensions.OpenApi.Extensions;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureOpenApi()
.Build();

host.Run();

一切都按预期进行,我可以访问我的 swagger UI url:http://localhost:7001/api/swagger/ui

<小时/>

现在是时候保护我的 Az Function 并添加对 JWT token 验证 的支持了。为此,我遵循了这篇很棒的文章: https://joonasw.net/view/azure-ad-jwt-authentication-in-net-isolated-process-azure-functions

因为我位于隔离 Azure Functions 中,所以我现在可以利用中间件,本文就是这样做的。它创建两个中间件。所以我像这样添加了它们:

var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults((context, builder) =>
{
builder.UseMiddleware<AuthenticationMiddleware>();
builder.UseMiddleware<AuthorizationMiddleware>();
})
.ConfigureOpenApi()
.ConfigureServices((context, services) =>
{
...
})
.Build();

host.Run();

问题:

每当我启动 Azure Function 并尝试访问我的 swagger UI url http://localhost:7001/api/swagger/ui

由于 身份验证中间件 启动并且我没有 authorization header 值,我现在收到 401 未经授权

我认为没有 authorization header 值是正常的,因为我只是想查看一个 swagger UI url。

如果我来自包含“swagger”一词的网址,如何要求身份验证中间件不查找authorization header ?

或者有更好/不同的方法来实现这一目标吗?

谢谢真诚的

最佳答案

查看documentation ,您可以使用 UseWhen 扩展方法。

您需要至少使用 Microsoft.Azure.Functions.Worker nuget 包的 1.8.0-preview1 版本。 (参见github issue)

然后在您的代码中您应该能够执行类似的操作:

using Microsoft.Azure.Functions.Worker.Extensions.OpenApi.Extensions;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults((hostContext, builder) =>
{
builder.UseWhen<AuthenticationMiddleware>(functionContext =>
{
// Only use the middleware if not related to swagger
// Condition could be improved tho.
return !functionContext.FunctionDefinition.Name.Contains("Swagger");
});
...
})
...

host.Run();

关于azure - Swagger UI 页面的隔离 Azure Function 绕过身份验证中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72707349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com