【发布时间】:2018-06-08 13:28:11
【问题描述】:
我有一个 WEB API,它有一个 C# 后端(使用 DDD)和一个在不同服务器中托管的 Angular 中使用它的前端。我想在他们登录时获取我的客户的 IP(出于审计目的),当我尝试通过邮递员运行我的代码时它可以工作,但是当通过前端发出请求时,它总是返回前端服务器 IP。
我尝试过使用IpPublicKnowledge,这是一个使用网页获取 IP 的 Nuget 包。
我尝试了从 HttpContext 获取 IP 的不同方法,但它们也返回前端服务器 IP,而不是客户端的 IO。
【问题讨论】:
-
了解当您的请求通过代理层时,
HTTP_X_FORWARDED_FOR标头是如何组成的。然后,编写一个分解列表的代码,而不是最后一个(您的前端服务器),而是第一个(实际客户端 IP)。 -
换句话说,这看起来像是 stackoverflow.com/questions/753645/… 的副本。是吗?
-
您的 Web API 获取调用 Web API 的应用程序的 IP。因此,如果您的 Web 应用程序调用 Web API,那么它将获得 Web 应用程序的 IP。如果您想要最终用户的 IP,那么您应该在 Web 应用程序中获取该 IP,然后将其转发到 Web API。
-
@WiktorZychla 我查看了其他问题,它指出我可以使用 HTTP_X_FORWARDED_FOR 获取客户端的 IP,但这不一定是客户端的 IP,它可能是公司网关和一些代理擦除它数据出来。所以它不像我想要的那样准确
-
@ChetanRanpariya 我明白了,但是这个 API 将被其他应用程序(移动)使用,我想只负责在后端获取 IP。
标签: c# asp.net-web-api backend