Vli*_*nce 5 azure azure-functions .net-6.0
我创建了一个新的 .NET 6独立Azure 函数。我已经为 Swagger/OpenAPI 添加了特定的 Nuget 包(用于独立):
Microsoft.Azure.Functions.Worker.Extensions.OpenApi v1.3.0
Run Code Online (Sandbox Code Playgroud)
然后,我使用适当的属性装饰我的 HttpTrigger 函数,并在我的内部[OpenApiOperation]正确添加该方法,如下所示:ConfigureOpenApi()Program.cs
Microsoft.Azure.Functions.Worker.Extensions.OpenApi v1.3.0
Run Code Online (Sandbox Code Playgroud)
一切都按预期工作,我可以访问我的 swagger UI url:http://localhost:7001/api/swagger/ui
现在是时候保护我的 Az Function 并添加对JWT token validation. 为此,我遵循了这篇精彩的文章:
https://joonasw.net/view/azure-ad-jwt-authentication-in-net-isolated-process-azure-functions
因为我位于一个独立的Azure 函数中,所以我现在可以利用它middleware,而本文正是这样做的。它创建了两个middleware. 所以我像这样添加了它们:
using Microsoft.Azure.Functions.Worker.Extensions.OpenApi.Extensions;
using Microsoft.Extensions.Hosting;
var host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.ConfigureOpenApi()
.Build();
host.Run();
Run Code Online (Sandbox Code Playgroud)
问题:
每当我启动 Azure Function 并尝试访问我的 swagger UI url http://localhost:7001/api/swagger/ui
401 unauthorized由于Authentication Middleware我没有标头值,因此我现在得到了 a authorization。
我相信我没有authorization标头值是正常的,因为我只是想查看一个 swagger UI url。
如果我来自包含“swagger”一词的网址,如何才能要求他们Authentication middleware不查找标头?authorization
或者有更好/不同的方法来实现这一目标吗?
真诚的感谢
查看文档,可以使用UseWhen扩展方法。
您需要至少使用nuget 包的1.8.0-preview1Microsoft.Azure.Functions.Worker版本。(参见github问题)
然后在您的代码中您应该能够执行类似的操作:
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1933 次 |
| 最近记录: |