允许通过移动应用和我的域

时间:2015-07-21 14:42:54

标签: php api rest

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

如果我将允许原始标题设置为我的网站,则API停止响应移动设备。请建议是否可能。

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

        $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。

由于

3 个答案:

答案 0 :(得分:2)

绝对可行的方法是创建令牌,会话令牌或访问令牌。我们专门使用Session Tokens和WealthEngine API(http://dev.wealthengine.com/api),以便它们超时。在最近的一次API活动中,来自ProgrammableWeb的David对Android平台上的移动应用程序的Sniff Tokens和Secrets的轻松性进行了很好的演示。这正是您希望这些令牌过期的原因。

答案 1 :(得分:1)

我建议通过访问令牌保护您的REST API。我刚刚为我创建的REST API做了类似的事情。有很多很棒的文章可用于#34;安全REST API&#34;。以下是我发现特别有用的链接。我强烈建议您使用HTTPS来帮助保护您的API。

https://stormpath.com/blog/secure-your-rest-api-right-way/

答案 2 :(得分:1)

这是您通常检查真实访客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)可能会派上用场。