Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET Core 3中设置身份验证回退策略时,允许匿名操作系统访问healthcheck端点_C#_.net_Asp.net Core_Asp.net Web Api_Asp.net Core 3.0 - Fatal编程技术网

C# 在ASP.NET Core 3中设置身份验证回退策略时,允许匿名操作系统访问healthcheck端点

C# 在ASP.NET Core 3中设置身份验证回退策略时,允许匿名操作系统访问healthcheck端点,c#,.net,asp.net-core,asp.net-web-api,asp.net-core-3.0,C#,.net,Asp.net Core,Asp.net Web Api,Asp.net Core 3.0,asp.net core 3允许设置后备策略,以使端点在默认情况下安全: services.AddAuthorization(选项=> { options.FallbackPolicy=new AuthorizationPolicyBuilder() .RequireAuthenticatedUser()文件 .Build(); }); 这是一个很棒的特性,但我也有一个健康检查端点,现在需要授权 services.AddHealthChecks(); [...] app.UseEndpoint

asp.net core 3允许设置后备策略,以使端点在默认情况下安全:

services.AddAuthorization(选项=>
{
options.FallbackPolicy=new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()文件
.Build();
});
这是一个很棒的特性,但我也有一个健康检查端点,现在需要授权

services.AddHealthChecks();
[...]
app.UseEndpoints(端点=>{
端点。MapHealthChecks(“/health”);
endpoints.MapControllers();
});

如何允许匿名访问HealthCheck端点(无身份验证或授权)?

您可以在使用AuthenticationMiddleware之前调用HealthCheckMiddleware:

app.Map(“/health”,appbuilder=>{
appbuilder.UseMiddleware();
});
//或
//应用程序使用健康检查(“/health”);
app.UseRouting();
//确保身份验证中间件在运行状况检查中间件之后运行
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(端点=>
{
endpoints.MapControllerRoute(
名称:“默认”,
模式:“{controller=Home}/{action=Index}/{id?}”);
});

我遇到了完全相同的问题,因此我希望这有助于实现以下目标:

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute().RequireAuthorization();

            endpoints.MapHealthChecks("/health").WithMetadata(new AllowAnonymousAttribute());

        });

从.NET 5开始,有一个更清晰的方法-
AllowAnonymous()


这对我有用!我还需要指定HealthCheckOptions,这可以通过创建一个对象HealthCheckOptions并传递它来实现:
appbuilder.usemidware(Options.Create(HealthCheckOptions))另一个提示:在
ConfigureServices
方法中,在配置任何授权之前,我还调用了
AddHealthChecks
调用。顺便说一句,我对swagger/OpenApi端点也有同样的问题。在
Configure
中的
UseAuthentication
之前,我需要移动
UseOpenApi
UseSwaggerUi3
方法,这样端点就不需要身份验证来呈现ui了。@wxt实际上,服务的顺序并不重要,这与中间件不同:)看起来更好,因为这些更改的目的似乎是降低启动期间调用顺序的重要性。
app.UseEndpoints(endpoints =>
    {
        endpoints.MapHealthChecks("/health").AllowAnonymous();
    });