C# 在ASP.NET Core 3中设置身份验证回退策略时,允许匿名操作系统访问healthcheck端点
asp.net core 3允许设置后备策略,以使端点在默认情况下安全: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
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();
});