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

将静态Web应用(SWA)后端关联到APIM时如何使用自定义订阅密钥头?

Azure静态Web应用(SWA)配合非默认订阅头的APIM后端配置方案

结论

Azure静态Web应用完全可以配合使用非默认订阅头(如x-api-key)的APIM后端,通过以下两种方案可解决头不匹配导致的认证失败问题:

方案一:APIM入站策略映射头(无需修改SWA配置)

在APIM的目标API或产品上添加入站策略,将SWA自动发送的默认头Ocp-Apim-Subscription-Key的值映射到自定义头x-api-key,同时可选择移除默认头避免冲突。

策略代码

<inbound>
    <!-- 将默认订阅头的值覆盖到自定义头x-api-key -->
    <set-header name="x-api-key" exists-action="override">
        <value>@{
            return context.Request.Headers.GetValueOrDefault("Ocp-Apim-Subscription-Key", string.Empty);
        }</value>
    </set-header>
    <!-- 可选:移除默认头,减少冗余 -->
    <remove-header name="Ocp-Apim-Subscription-Key" />
</inbound>

注意事项

  • 确保该策略应用到SWA关联的目标API或对应的产品上,而非全局策略(避免影响其他API)。
  • 若之前尝试此策略未生效,检查策略的应用范围是否正确,或是否有其他策略覆盖了头设置。

方案二:手动配置SWA代理路由(自定义请求头)

放弃SWA与APIM的自动关联,通过staticwebapp.config.json手动配置代理规则,指定发送自定义订阅头x-api-key。

步骤1:解除SWA与APIM的自动关联

在Azure门户的SWA实例中,找到API > 后端,移除已关联的APIM实例。

步骤2:配置staticwebapp.config.json

在SWA的前端代码根目录下创建或修改staticwebapp.config.json,添加路由规则:

{
  "routes": [
    {
      "route": "/api/home/v1/*",
      "backend": {
        "url": "https://your-apim-instance.azure-api.net/home/v1/{rest}"
      },
      "headers": {
        "x-api-key": "{API_SUBSCRIPTION_KEY}"
      }
    }
  ]
}

步骤3:配置SWA应用设置

在Azure门户的SWA实例中,进入配置 > 应用设置,添加名为API_SUBSCRIPTION_KEY的设置,值为你的APIM订阅密钥。SWA会自动替换配置文件中的{API_SUBSCRIPTION_KEY}占位符。

问题原因说明

你遇到的认证失败核心原因:

  • SWA与APIM自动关联时,会硬编码发送默认订阅头Ocp-Apim-Subscription-Key,即使修改了APIM中API的订阅头名称,SWA仍会按默认逻辑发送。
  • APIM此时只识别自定义头x-api-key,因此判定请求缺少订阅密钥,返回权限错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 03:19:58