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

如何将Azure API管理订阅密钥传递至Azure Function?

传递Azure API管理订阅密钥至Azure Function方案

问题原因

你遇到的情况是因为APIM调用Azure Function时,如果Function开启了密钥验证,APIM会自动在请求中带上Function的订阅密钥,这导致你读取ocp-apim-subscription-key时拿到的是Function的密钥,而非用户调用APIM时传入的APIM订阅密钥。

解决方法

1. 通过APIM入站策略转发密钥

在APIM的API入站策略中,把用户传入的APIM订阅密钥复制到一个自定义请求头里,这样后端Function就能读取这个自定义头获取到APIM的密钥。

示例策略代码:

<inbound>
    <!-- 将APIM订阅密钥存入自定义请求头 -->
    <set-header name="x-apim-subscription-key" exists-action="override">
        <value>@(context.Request.Headers.GetValueOrDefault("ocp-apim-subscription-key", ""))</value>
    </set-header>
    <!-- 保留其他现有入站策略 -->
</inbound>

2. 在Azure Function中读取自定义头

在Function代码里读取这个自定义请求头即可拿到APIM的订阅密钥:

  • C#示例:
var apimSubscriptionKey = req.Headers["x-apim-subscription-key"].FirstOrDefault();
  • Python示例:
apim_subscription_key = req.headers.get('x-apim-subscription-key')

3. 不推荐方案:关闭Function密钥验证

如果你的Function仅通过APIM对外暴露,可以关闭Function的密钥验证,这样APIM不会自动添加Function密钥头,你直接读取ocp-apim-subscription-key就能拿到APIM的密钥。但这种做法会让Function失去一层安全防护,不建议在生产环境使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 12:02:35