2015-07-21 74 views
0

我在api.xyz.com上部署了一些REST API,现在我想允许所有API通过授权移动设备和我的域只能访问xyz.com。允许通过移动应用程序和我的域只能访问REST API

如果我设置允许来源标头到我的网站,那么API停止响应移动devices.Please建议是否可能。

另外,当我尝试在REST API调用中获取消费者IP地址时,它总是以$ _SERVER [REMOTE_ADDR]而不是客户端IP地址返回我的API服务器公共IP。我也尝试获取消费者IP地址但没有成功。

 $ipaddress = ''; 
     if (getenv('HTTP_CLIENT_IP')) { 
      $ipaddress = getenv('HTTP_CLIENT_IP'); 
     } else if (getenv('HTTP_X_FORWARDED_FOR')) { 
      $ipaddress = getenv('HTTP_X_FORWARDED_FOR'); 
      if (strpos($ipaddress, ',') > 0) { 
       $addr = explode(",", $ipaddress); 
       $ipaddress = trim($addr[0]); 
      } 
     } else if (getenv('HTTP_X_FORWARDED')) { 
      $ipaddress = getenv('HTTP_X_FORWARDED'); 
     } else if (getenv('HTTP_FORWARDED_FOR')) { 
      $ipaddress = getenv('HTTP_FORWARDED_FOR'); 
     } else if (getenv('HTTP_FORWARDED')) { 
      $ipaddress = getenv('HTTP_FORWARDED'); 
     } else if (getenv('REMOTE_ADDR')) { 
      $ipaddress = getenv('REMOTE_ADDR'); 
     } else { 
      $ipaddress = 'UNKNOWN'; 
     } 

请建议为什么它总是给我的服务器公共IP,即使如果我通过我的机器打api。

谢谢

+0

你总是无法获得用户的实际IP地址,特别是如果它是移动设备。那些几乎总是在NAT网关的后面,你将得到的唯一IP就是网关。 –

回答

0

这是你如何正常检查真正的访问者IP:

if (!empty($_SERVER["HTTP_CLIENT_IP"])) 
{ 
//check for ip from share internet 
$ip = $_SERVER["HTTP_CLIENT_IP"]; 
} 
elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) 
{ 
// Check for the Proxy User 
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"]; 
} 
else 
{ 
$ip = $_SERVER["REMOTE_ADDR"]; 
} 

// This will print user's real IP Address 
// does't matter if user using proxy or not. 
echo $ip; 

REST API Authorization & Authentication (web + mobile)可能来得心应手。

+0

我尝试在我的API域上设置标题(“Access-Control-Allow-Origin:http://example.com”),但它仍然允许我从其他来源点击并返回响应。为什么当我只允许example.com时,它不阻止其他来源 – coder

2

绝对要走的路是创建令牌,会话令牌或访问令牌。我们将会话令牌与WealthEngine API(http://dev.wealthengine.com/api)一起使用,以便它们超时。在最近的API活动中,来自ProgrammableWeb的David对于在Android平台上移动应用程序的Sniff Tokens和Secrets有多容易进行了很好的演示。这正是您希望这些令牌过期的原因。

相关问题