【发布时间】:2016-11-12 07:18:56
【问题描述】:
- 是否有现成的策略来提取传入的 IP 地址?我找不到。
- 我是否需要编写代码才能做到这一点?如果是这样,我该怎么做?还有哪些其他选择?
【问题讨论】:
标签: policy azure-api-management
【问题讨论】:
标签: policy azure-api-management
您绝对可以使用策略表达式。
但更简单的方法可能如下:
如果您的目标是在后端捕获源 IP 地址(而不是 Azure 的)(用于记录等目的),那么:
每当 Azure API Management Studio 将请求转发到您的后端时,它都会包含标头 X-Forwarded-For
例如 {[X-Forwarded-For, 123.45.67.891, 13.75.131.25:1795]}
第一个 IP 地址是您想要的。 第二个 IP 地址实际上是 Azure 的。
例如第一,移动应用向 Azure API Mgmt 发出请求--> 第二,Azure API Mgmt 将请求转发到您的后端--> 最后,您从 X-Forwarded-For 获取客户端的 IP(即移动设备的 IP)。
如何从后端的标头中捕获 IP 取决于您以及您使用的技术(例如 ASP.net core、node.js 等)。
这是我正在捕获 IP 的代码的 sn-p
private LogMetadata BuildRequestMetadata(HttpRequestMessage request, Task<string> requestBody)
{
var headers = request.Headers.ToDictionary(d => d.Key, d => d.Value.Join(", "));
// If header X-Forwarded-For is included,
// it means the request is coming from Azure API MGMT studio.
// Example header value: {[X-Forwarded-For, 123.45.67.891 (Mobile Device), 13.75.131.25:1795 (Azure API Mgmt)]}
var clientIp =
headers.ContainsKey("X-Forwarded-For")
? headers["X-Forwarded-For"].Split(',')[0]
: request.GetOwinContext().Request.RemoteIpAddress;
}
【讨论】:
您可以使用策略expressions 在任何策略中提取 IP 地址。表达式为 context.Request.IpAddress
【讨论】: