如何防止 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" />
这就搞定了。
我正在使用 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" />
这就搞定了。