您可以使用策略expressions在任何策略中提取IP地址。表达式将是context.Request.IpAddress
你绝对可以使用策略表达式。
但更简单的方法可能如下:
如果您的目标是捕获后端的原始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管理发出请求 - >其次,Azure API管理将请求转发到您的后端 - >最后,您从X-Forwarded-For捕获客户端的IP(即移动设备的IP) 。
如何从后端的标头中捕获IP取决于您和您正在使用的技术(例如ASP.net核心,node.js等)。
这是我正在捕获IP的代码片段
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;
}