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

Azure Function的x-functions-key头部未接收及EasyAuth问题排查

问题分析与解决方案

核心原因

启用EasyAuth(App Service Authentication)后,Azure App Service的认证中间件会优先拦截并过滤x-functions-key请求头,转而生成x-ms-auth-token用于自身认证流程,这就是你在request.headers中看不到x-functions-key的直接原因。而URL参数中的code不会被EasyAuth中间件拦截,因此能正常触发Function的密钥认证逻辑。

可行解决方案

1. 调整认证优先级,让Function密钥认证优先

修改host.json,配置Function密钥认证的优先级高于EasyAuth,确保请求先被Function的密钥校验逻辑处理:

{
  "version": "2.0",
  "extensions": {
    "http": {
      "functionKeyAuthorization": {
        "enabled": true,
        "priority": 1
      }
    }
  }
}

priority值越小优先级越高,这里设为1即可确保它在EasyAuth之前执行。

2. 为特定接口禁用EasyAuth

针对exec()这个需要Function密钥认证的接口,在其function.json中添加auth.disableAuth配置,跳过EasyAuth中间件处理:

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "req",
      "methods": ["post"]
    }
  ],
  "auth": {
    "disableAuth": true
  }
}

这样exec()接口将直接使用Function的密钥认证机制,x-functions-key头部会被正常识别。

3. 统一使用EasyAuth令牌认证

既然已经启用EasyAuth,可放弃Function密钥,统一用EasyAuth的认证流程:

  • 客户端调用login()接口完成认证,获取x-ms-auth-token
  • 请求exec()时携带x-ms-auth-token作为认证头,替代x-functions-key

补充说明

你之前配置的Access-Control-Expose-Headers无效,是因为问题根源并非CORS头部暴露,而是x-functions-key被EasyAuth中间件拦截过滤,因此该配置无法解决当前认证失败问题。

内容的提问来源于stack exchange,提问作者Aiden Dipple

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:47:02