.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做前置防护
修改平台配置,关闭自动移除认证头的逻辑,操作有两种可选:- 简易配置方式:进入Function的「配置」-「应用程序设置」页面,新增应用设置项
WEBSITE_AUTH_DISABLE_TOKEN_REMOVAL,将值设置为true,保存后重启Function应用即可生效。 - 配置文件方式:通过Kudu高级工具进入站点
wwwroot目录,新建或编辑applicationhost.xdt文件,添加如下配置后重启站点:
- 简易配置方式:进入Function的「配置」-「应用程序设置」页面,新增应用设置项
<?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
相关产品推荐
相关产品推荐

