我正在摆弄Azure API管理网关,看看它是否符合我们的目的。从我们的ERP应用程序(Saas应用程序的IP白名单列出了我们的办公室位置(添加API非常简单,我可以在我们的办公室内调用它。然而,当我从任何其他位置调用api时,我会从ERP收到IP被阻止的消息。我目前在开发层,(应该(分配了一个静态IP,比如
VIP公众:20.82.86.xxx
到目前为止我所做的:
-
添加了一个内置策略,剥离了头的x-forwarded-for,尝试了API级别和操作级别的
<inbound> <base /> <set-header name="X-Forwarded-For" exists-action="delete" />
到目前为止我测试/注意到的内容:
- 当我在APIM中测试调用时,IP被阻止。我可以看到在入站时头被剥去了设置标头(0.008毫秒("标头
X-Forwarded-For
已删除"> - 我看到APIM在后端添加了一个x-forwarded-for标头,似乎与前端/APIM网站的IP一致{"名称":"X-Forwarded-Forf","值":"13.91.254.xxx"}
- 我得到的回复是,来自我的设备(84.105.xxx.xxx(的ip被ERP阻止
我不明白为什么源IP是来自我的设备/位置的本地IP,而不是API网关。
Azure API管理网关似乎对我们的目的非常有用,而且使用起来并不难。然而,重要的是,我可以从我们办公室以外的其他地方打电话给它。有什么想法吗?
我测试了在入站策略中为X-Forwarded-for标头设置一个显式值:
<set-header name="X-Forwarded-For" exists-action="override">
<value>xx.xx.xx.xx</value>
</set-header>
然后后端请求中得到的头是:
X-Forwarded-For: xx.xx.xx.xx,yy.yy.yy.yy
这可能会欺骗你的后端,以为xx.xx.xx.xx是你的客户端IP,而实际上它是yy.yy.yy.
如果在通过策略将请求转发到后端之前以独占方式添加了任何此类标头,则可以通过策略将其删除。但默认情况下,APIM网关添加的X-Forwarded-For标头无法消除,因为这是设计的,并且是服务准确地将请求转发到后端API所需要的。
https://www.geeksforgeeks.org/http-headers-x-forwarded-for/