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

多区域Azure API Management部署:同一API订阅密钥传递最佳实践

这是个很典型的多区域APIM部署场景问题!我来分享几个经过生产环境验证的最佳实践,帮你确保客户端请求能在任意APIM实例上正常通过密钥验证:

最佳实践方案

1. 优先统一为单一共享订阅密钥(最推荐)

如果业务允许,先尝试将两个不同的订阅密钥合并成一个跨所有APIM实例有效的共享密钥。因为多区域部署的APIM本质上属于同一个服务资源,订阅数据是全局同步的——你只需要在APIM中创建一个针对该API的订阅,生成唯一密钥,分发给客户端即可。这样客户端只需要传递这一个密钥,不管请求路由到哪个区域的实例,都能顺利通过验证,完全省去了多密钥的处理复杂度。

2. 利用APIM策略统一支持多密钥验证

如果因为业务限制必须保留两个密钥,那最好在APIM层面统一处理验证逻辑,而不是让客户端做复杂适配:

  • 在所有区域的APIM实例上配置相同的入站策略,允许两个密钥中的任意一个通过验证。推荐用「命名值(Named Values)」来存储密钥,方便后续更新且能同步到所有实例。
  • 示例策略代码(直接在APIM的API策略中添加):
    <inbound>
        <base />
        <!-- 允许两个订阅密钥中的任意一个通过验证 -->
        <check-subscription-key exists-action="401" failed-check-action="403" header-name="Ocp-Apim-Subscription-Key">
            <key>@(context.NamedValues["API_Subscription_Key_1"])</key>
            <key>@(context.NamedValues["API_Subscription_Key_2"])</key>
        </check-subscription-key>
    </inbound>
    
    配置完成后,客户端只需要传递两个密钥中的任意一个,所有APIM实例都会认可这个密钥,完全不需要客户端做额外处理。

3. 客户端层面的冗余重试策略(备选方案)

如果无法在APIM侧修改策略,才考虑让客户端处理多密钥的情况:

  • 让客户端在发起请求时先使用第一个密钥,如果收到401 Unauthorized或403 Forbidden的错误响应,自动重试并使用第二个密钥。
  • 注意事项:
    • 要限制重试次数(比如最多1次),避免无效请求占用资源;
    • 重试时要设置合理的间隔(比如几百毫秒),避免给APIM造成瞬时压力;
    • 务必通过HTTPS传递密钥,且将密钥放在Ocp-Apim-Subscription-Key请求头中,绝对不要放在URL参数里(防止密钥泄露)。

4. 绝对要遵守的安全原则

不管采用哪种方案,都必须保证密钥的安全:

  • 永远使用HTTPS传输请求,避免密钥在网络中明文传输;
  • 客户端要安全存储密钥(比如用环境变量、密钥管理服务,不要硬编码在代码或配置文件中);
  • 定期轮换密钥,减少密钥泄露带来的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:12:34