3

目前我正在开发一个 REST API

我的 API 访问仅在我的服务器和我的客户端服务器(B2B,企业对企业)之间。示例:myserverapi.com(我的 REST API 服务器)和 myclientserver.com(访问我的 API 的我的客户端服务器)*没有第三个连接/应用程序

我们正在实现 api_key(当然这是必须的)和域名(因此客户端指定了他将访问 api 的域名,所以我的服务器 api 将只接受它)

对于 myserverapi.com,如何只接收来自 myclientserver.com 的连接?只是使用$_SERVER['REMOTE_ADDR']?够了吗 ?但是在从几个地方阅读之后,我不能使用它,因为如果它在代理或负载均衡器场下,IP 可能是错误的。有什么解决办法?

如果我安装了 SSL 证书怎么办?我必须更改我的代码吗?或者只是购买并安装在服务器端自动我的api将是安全的?

openssl-verify 功能是否只是真正了解访问是否来自特定服务器的安全方式?http://php.net/manual/en/function.openssl-verify.php这是否意味着我必须更改我的代码以加密和解密此链接中的数据http://3stepsbeyond.co.uk/2010/12/ openssl-and-php-tutorial-part-two/

所以基本上我只想确保 myserverapi.com 只能从 myclientserver.com 获得访问权限。并且 myclientserver.com 只接受来自 myserverapi.com 的数据。怎么做 ?

我希望有人给我一个很好的解释。

谢谢你

4

3 回答 3

1

你可以做一系列的事情。最不可知的代码是 HTTPS 客户端证书。如果您不关心用户到底是谁,而只是想确保这是允许的,让 apache 处理。配置文件中只有几行代码,您无需修改​​代码。

您的第二个选项是 ACL,即使在路径级别,您也可以在 Apache 中再次处理它。当然,在操作系统级别,您也可以将它们应用于 IP 和端口。这同样适用于服务器/服务器内部或前面的防火墙。

如果您不想处理管理证书或 IP/端口防火墙和 ACL,您可以实施 2 legged Oauth。客户端可以使用库,因为它们几乎已经以任何语言存在,并且服务器的代码并不太复杂。

于 2012-12-09T19:00:42.423 回答
0

A little late for an answer, but for checking remote_addr for requests that might come via proxy you can check if X-forwarded-for header is set, and use that if it exists.

http://en.wikipedia.org/wiki/X-Forwarded-For

于 2013-08-03T02:45:59.757 回答
0

对于 SSL 证书,您不必更改代码。但是,您可能想要检查服务器端口,如果不是 SSL,则抛出异常:

if ($_SERVER['SERVER_PORT'] != 443) {
    header('405 Method Not Allowed');
    exit();
}

当然,您可以使用 Apache 完成类似的限制,只需不在端口 80 上提供服务即可。

对于IP限制,$_SERVER['REMOTE_ADDR']应该可以在大多数情况下工作。不幸的是,我认为没有办法绕过代理。但是,API 密钥应该足以满足大多数安全要求。

于 2012-12-09T04:22:41.603 回答