【问题标题】:Azure Api App - IP Restriction - Cannot get correct client IP address and/or hostnameAzure Api 应用程序 - IP 限制 - 无法获取正确的客户端 IP 地址和/或主机名
【发布时间】:2015-05-07 14:14:56
【问题描述】:

我已经构建了一个 .NET Web API 并将其作为 API 应用程序部署到 Azure。我试图通过 IP 地址或主机名来实现对 API 的访问限制。我尝试了以下几种方式:

  1. 通过实现 OwinMiddleware 类并根据白名单检查请求 RemoteIpAddress 和 Host。我通过

    获取的这些值
    var ip = context.Request.RemoteIpAddress;
    var host = context.Request.Host.ToString();
    

上下文的类型为 IOwinContext

  1. 在控制器中通过检查以下内容:

    var ipAddress = Request.GetOwinContext().Request.RemoteIpAddress;
    var host = Request.GetOwinContext().Request.Host;
    //Also tried 
    //var ipAddress = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] 
    
  2. 在 web.config 中通过指定允许的 IP 地址:

    <system.webServer>
        <security>
          <ipSecurity allowUnlisted="false" denyAction="Forbidden">
            <add allowed="true" ipAddress="xxx.xx.xx.xx" subnetMask="255.255.255.0"/>
          </ipSecurity>
        </security>
    </system.webServer>

如果我没有将 Web API 自己的 IP 地址添加到允许的 IP 列表中,则会收到禁止错误。当我将 Web API 的 IP 地址添加到允许列表时,任何客户端都可以向该 API 发送请求。

然后,我使用 Postman 以及从托管在单独的 Azure VM 上的另一个 Web 项目的实例在本地调用我的 Web api。此 VM 与 Web Api 不在同一资源组中。

奇怪的是,无论我尝试什么,请求的主机和ip地址总是看起来是Web Api自己的主机和ip地址。所以看起来好像对 web api 的请求是内部的,而不是来自外部源。因此,我永远不会在请求详细信息中获得本地计算机或 Azure VM 的 IP/主机名。

我真的不明白这怎么会发生。我是否要以错误的方式获取客户端 IP 和主机名?还是 Web Api 中的内部路由发生了一些事情,使我丢失了原始客户端请求信息?还是我在这里从根本上误解了某些东西?

编辑:

经过一番测试,我发现如果我使用了

HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]

然后我会在 IP 地址列表中获得正确的原始客户端 IP 地址(它通常是列表中的第一个 IP 地址)。但是我看不到获取正确客户端主机名的方法。

但是,我仍然想知道为什么我无法使用例如 Owin 或 web.config IP 限制获取正确的客户端信息?这是 Azure/Web Api 的事情吗?还是我需要从我调用 Web api 的代理设置更多请求标头?

【问题讨论】:

    标签: c# azure asp.net-web-api


    【解决方案1】:

    经过一番测试,我发现如果我使用了

    HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]
    

    然后我会在 IP 地址列表中获得正确的原始客户端 IP 地址(它通常是列表中的第一个 IP 地址)。但是我看不到获取正确客户端主机名的方法。

    【讨论】:

    • 我做了同样的事情,我可以成功获得 IPv4 地址但是我没有看到任何请求 IPv6 已发送?我是否必须在 azure 服务端启用某些东西?这是 azure 云服务的已知限制吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2021-04-29
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    相关资源
    最近更新 更多