我在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。
由于
答案 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。
答案 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)可能会派上用场。