如何在 azure api 管理策略中提取 ip 地址?
How do I extract an ip address in the azure api management policy?
- 是否有开箱即用的策略来提取传入的 ip 地址?我找不到。
- 我需要编写代码来执行此操作吗?如果是这样,我该怎么做?还有哪些其他选择?
您可以使用策略 expressions 在任何策略中提取 IP 地址。表达式将是 context.Request.IpAddress
你绝对可以使用策略表达式。
但更简单的方法可能是以下方法:
如果您的目标是在后端捕获原始 IP 地址(而非 Azure 的 IP 地址)(用于日志记录等目的),则:
只要 Azure API Management Studio 将请求转发到您的后端,它就会包含 header X-Forwarded-For
例如
{[X-Forwarded-For, 123.45.67.891, 13.75.131.25:1795]}
第一个IP地址就是你想要的。
第二个 IP 地址实际上是 Azure 的。
例如第一,移动应用向 Azure API 管理发出请求 --> 第二 , Azure API Mgmt 将请求转发到您的后端 --> 最后, 您捕获客户端的 IP(即移动设备的IP) 来自 X-Forwarded-For。
如何从后端的 header 捕获 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;
}
- 是否有开箱即用的策略来提取传入的 ip 地址?我找不到。
- 我需要编写代码来执行此操作吗?如果是这样,我该怎么做?还有哪些其他选择?
您可以使用策略 expressions 在任何策略中提取 IP 地址。表达式将是 context.Request.IpAddress
你绝对可以使用策略表达式。
但更简单的方法可能是以下方法:
如果您的目标是在后端捕获原始 IP 地址(而非 Azure 的 IP 地址)(用于日志记录等目的),则:
只要 Azure API Management Studio 将请求转发到您的后端,它就会包含 header X-Forwarded-For
例如 {[X-Forwarded-For, 123.45.67.891, 13.75.131.25:1795]}
第一个IP地址就是你想要的。 第二个 IP 地址实际上是 Azure 的。
例如第一,移动应用向 Azure API 管理发出请求 --> 第二 , Azure API Mgmt 将请求转发到您的后端 --> 最后, 您捕获客户端的 IP(即移动设备的IP) 来自 X-Forwarded-For。
如何从后端的 header 捕获 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;
}