如何防止 Azure API 管理将订阅密钥查询参数传递给逻辑应用?

tha*_*ssd 3 azure azure-api-management azure-logic-apps

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

因此,我的 API 调用使用https://my.azure-api.net/myapi/manual/paths/invoke?subscription-key=mykey的格式发送到 Azure

现在,在 Azure API 设置中,我确实创建了一个策略集来删除“订阅密钥”查询参数上的操作,但问题是:

尽管该参数已从逻辑应用程序的请求正文中删除,但在深入研究逻辑应用程序中显示各种标头的“RAW”输出时,我们可以在这两个标头中看到订阅密钥:

 "X-WAWS-Unencoded-URL": "/myapi/manual/paths/invoke?subscription-key=xxx
 "X-Original-URL": /myapi/manual/paths/invoke?subscription-key=xxx
Run Code Online (Sandbox Code Playgroud)

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

有什么解决方法吗?

tha*_*ssd 6

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

<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" />

这可以解决它。