Azure App Service健康检查:Header值与环境变量不匹配求助
问题排查与解决方案
针对你遇到的Azure App Service健康检查持续返回401的问题,以下是具体排查方向和修复步骤:
一、核心排查方向
1. 环境变量加载验证
WEBSITE_AUTH_ENCRYPTION_KEY 配置后,必须重启App Service实例才能生效。如果未重启,应用会继续使用旧值(或空值),导致哈希匹配失败。
- 操作步骤:
- 进入App Service的“概述”页面,点击“重启”按钮强制重启所有实例。
- 在健康检查端点中添加日志,输出读取到的环境变量哈希值(避免泄露原始值),确认是否与你配置的一致:
public Boolean HeaderMatchesEnvVar(string headerValue, ILogger logger) { var sha = SHA256.Create(); string envVar = Environment.GetEnvironmentVariable("WEBSITE_AUTH_ENCRYPTION_KEY"); if (string.IsNullOrEmpty(envVar)) { logger.LogError("WEBSITE_AUTH_ENCRYPTION_KEY 未加载"); return false; } string hash = Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(envVar))); logger.LogInformation("计算出的哈希值: {Hash}", hash); logger.LogInformation("接收到的Header值: {Header}", headerValue); return hash == headerValue; }
2. 哈希计算一致性验证
Azure健康检查服务生成的x-ms-auth-internal-token,是对WEBSITE_AUTH_ENCRYPTION_KEY进行无BOM的UTF-8编码SHA256哈希,再Base64编码的结果。如果你的编码逻辑不一致,会导致匹配失败。
- 验证方法:
在本地用相同逻辑计算你配置的密钥哈希,与Postman中使用的有效Header值对比,确认计算逻辑是否正确。
3. 健康检查请求Header确认
检查健康检查服务是否真的发送了x-ms-auth-internal-tokenHeader:
- 操作步骤:
- 开启App Service的“应用日志记录”,设置日志级别为“详细”。
- 查看健康检查请求的日志,确认
x-ms-auth-internal-tokenHeader是否存在,以及其具体值。
4. 路由与端点有效性验证
确保健康检查路径配置与实际端点完全匹配:
- 确认App Service健康检查设置中的“路径”为
/api/healthcheck(注意开头的斜杠)。 - 验证控制器路由是否正确:如果控制器上标注了
[Route("api/healthcheck")],则方法上的[Route("")]是正确的;如果控制器无路由前缀,需将方法路由改为[Route("api/healthcheck")]。
5. 实例同步问题(横向扩展场景)
如果你的App Service使用了多实例部署,可能存在环境变量同步延迟,导致部分实例的WEBSITE_AUTH_ENCRYPTION_KEY值不一致。
- 操作步骤:
- 暂时缩容到单实例测试,看是否恢复正常。
- 确认所有实例的环境变量配置完全一致。
二、快速验证方案
先简化健康检查端点,跳过验证逻辑,确认健康检查服务能正常访问端点:
[HttpGet] [Route("")] public IActionResult HealthCheck() { // 暂时跳过验证,直接返回200 return Ok("Healthy"); }
如果此时健康检查显示正常,说明问题确实出在Header验证环节,再回到上述排查步骤定位具体原因。
内容的提问来源于stack exchange,提问作者Domey
相关产品推荐
相关产品推荐

