You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6隔离模式Azure Function部署后丢失认证头如何解决

问题背景

基于.NET 6隔离进程模式开发的Azure Function应用,本地调试时所有逻辑运行正常:客户端附在请求中的认证头,可以在自定义认证中间件中正常读取。但部署到Azure环境后,自定义认证中间件无法读取到认证头,对应头字段缺失,判断是在请求处理链路中被提前移除。
程序启动核心代码如下:

public static void Main()
    {
        var host = new HostBuilder()
            .ConfigureFunctionsWorkerDefaults(builder =>
            {
                builder.UseNewtonsoftJson();
                builder.UseMiddleware<AuthenticationMiddleware>();
                builder.UseMiddleware<AuthorizationMiddleware>();
                builder.UseMiddleware<ExceptionHandlerMiddleware>();
                builder.Services.AddOptions<AppSettings>()
                             .Configure<IConfiguration>((settings, configuration) =>
                             {
                                 configuration.GetSection("AppSettings").Bind(settings);
                             });
                builder.Services.AddPersistenceRepositories();
                builder.Services.AddPersistenceServices();
                builder.Services.AddPersistenceInfrastructures();
                builder.Services.AddSingleton<IHttpFunctionExecutor, HttpFunctionExecutor>();
            })
            .ConfigureOpenApi()
            .Build();

        host.Run();
    }
问题根因

该问题是Azure平台侧的默认请求处理逻辑导致的,和业务代码本身无关:

  • 如果在Azure Function上开启了Easy Auth(即App Service内置的认证/授权功能),平台会在请求转发到函数运行时之前,提前完成认证令牌的校验。校验通过后,平台默认会移除请求中原始的Authorization等认证相关头,设计初衷是避免后端应用意外拿到原始令牌引发安全风险。
  • 本地调试时不存在Azure平台层的Easy Auth拦截逻辑,认证头可以完整透传到自定义中间件,因此本地运行正常;部署后认证头被平台层提前删除,自然无法在业务代码中读取到。
修复方案

根据你是否需要保留平台内置的Easy Auth能力,二选一操作即可:

  • 方案1:不需要使用Easy Auth
    直接进入Azure Function的认证设置页面,关闭App Service认证/授权功能,保存配置后平台将不再拦截、修改请求头,自定义中间件即可正常读取到认证头。
  • 方案2:需要保留Easy Auth做前置防护
    修改平台配置,关闭自动移除认证头的逻辑,操作有两种可选:
    1. 简易配置方式:进入Function的「配置」-「应用程序设置」页面,新增应用设置项WEBSITE_AUTH_DISABLE_TOKEN_REMOVAL,将值设置为true,保存后重启Function应用即可生效。
    2. 配置文件方式:通过Kudu高级工具进入站点wwwroot目录,新建或编辑applicationhost.xdt文件,添加如下配置后重启站点:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <system.webServer>
    <httpProtocol xdt:Transform="InsertIfMissing">
      <customHeaders>
        <add name="WEBSITE_AUTH_DISABLE_TOKEN_REMOVAL" value="true" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

注意:如果选择保留Easy Auth同时透传原始认证头,务必在自定义认证中间件中严格完成令牌的合法性校验,不可直接信任传入的令牌内容,避免引入安全漏洞。

内容的提问来源于stack exchange,提问作者jack.pop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 16:39:38