可以通过使用自定义授权策略来保护HealthCheck端点,而不是使用内置Authorization。
步骤如下:
services.AddAuthorization(options =>
{
options.AddPolicy("HealthCheckPolicy", policy =>
policy.RequireClaim("HealthCheckEnabled"));
});
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/healthcheck")
.RequireAuthorization("HealthCheckPolicy");
});
{
"HealthCheck": {
"Enabled": true
}
}
var healthCheckConfig = new HealthCheckConfig();
Configuration.GetSection("HealthCheck").Bind(healthCheckConfig);
services.AddSingleton(healthCheckConfig);
var healthCheckConfig = _configuration.GetSection("HealthCheck").Get();
if (healthCheckConfig.Enabled)
{
var claims = new[] { new Claim("HealthCheckEnabled", "true") };
var identity = new ClaimsIdentity(claims);
var principal = new ClaimsPrincipal(identity);
var token = new AuthenticationToken { Principal = principal };
HttpContext.User = principal;
}
上述代码将创建一个包含声明的声明标识,并将其附加到HttpContext.User属性中。这将满足我们之前所创建的“HealthCheckPolicy”授权策略,从而允许访问HealthCheck端点。
请注意,这种方法允许您细粒度