如何防止 Azure API 管理将 subscription-key 查询参数传递给逻辑应用程序?

How to prevent Azure API Management from passing the subscription-key query parameter to Logic App?

我正在使用 Azure API 管理作为我的逻辑应用程序的前端。 "subscription required" 设置需要启用,因为我们确实需要保护。但是,我们必须通过查询参数发送密钥,因为我们的调用应用程序仅支持 GET,不支持 POST.

所以我的 API 呼叫使用 https://my.azure-api.net/myapi/manual/paths/invoke?subscription-key=mykey

的格式发送到 Azure

现在在 Azure API 设置中,我确实创建了一个策略集来删除对 "subscription-key" 查询参数的操作,但问题是:

即使参数已从请求 body 中删除到逻辑应用程序中,但在深入研究逻辑应用程序中显示各种 headers 的 "RAW" 输出后,我们可以看到subscription-key这两个headers:

 "X-WAWS-Unencoded-URL": "/myapi/manual/paths/invoke?subscription-key=xxx
 "X-Original-URL": /myapi/manual/paths/invoke?subscription-key=xxx

换句话说,完整的原始查询 URL 在删除参数之前可供逻辑应用程序使用。这会将 API 订阅密钥公开给逻辑应用程序。

有什么解决方法吗?

啊我现在看到那些 header 实际上是由 Azure API 管理自动发送到后端逻辑应用程序 API,所以我所要做的就是设置 header 策略以删除它们以及查询参数策略。

<set-query-parameter name="subscription-key" exists-action="delete" /> <set-header name="X-WAWS-Unencoded-URL" exists-action="delete" /> <set-header name="X-Original-URL" exists-action="delete" />

这就搞定了。