【问题标题】:How do I extract an ip address in the azure api management policy?如何在 azure api 管理策略中提取 ip 地址?
【发布时间】:2016-11-12 07:18:56
【问题描述】:
  1. 是否有现成的策略来提取传入的 IP 地址?我找不到。
  2. 我是否需要编写代码才能做到这一点?如果是这样,我该怎么做?还有哪些其他选择?

【问题讨论】:

    标签: policy azure-api-management


    【解决方案1】:

    您绝对可以使用策略表达式。

    但更简单的方法可能如下:

    如果您的目标是在后端捕获源 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;  
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用策略expressions 在任何策略中提取 IP 地址。表达式为 context.Request.IpAddress

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2016-07-10
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多