我正在从头开始构建一个PHP应用程序(使用Kohana3框架)。我将构建它,以便我可以使用API在内部访问数据。与此同时,我想最终向公众提供。
我计划使用RESTful访问方法。但是,我很难找到有关如何正确保护API的明确信息。换句话说,我如何实现API签名和访问?
答案 0 :(得分:5)
您可以尝试frapi。它将很快允许您构建RESTful API,然后可以将其用于您的应用程序,并在以后公开显示相同的API。
答案 1 :(得分:2)
OAuth将是一个不错的选择。一个键/值对也是如此。您可能还想查看Mashape,但不完全确定它符合您的要求。
答案 2 :(得分:1)
我认为一个好的起点是阅读有关数字签名的一般信息。维基百科是一个很好的资源http://en.wikipedia.org/wiki/Public_Key_Infrastructure或http://en.wikipedia.org/wiki/X.509 在基本层面上,我会给每个客户一个私钥。在客户端库中,我会加密密钥。当客户端发出请求时,请验证密钥是您向该特定客户端发出的密钥。
答案 3 :(得分:1)
请查看3scale(http://www.3scale.net/)来执行此操作 - 它处理身份验证,访问控制,策略,速率限制等,并且对于大量流量是免费的。我们有一个PHP模块可以插入系统来启用这些功能。 (免责声明 - 我在那里工作 - 但希望它有用!)
答案 4 :(得分:0)
我使用带有基本身份验证的CodeIgniter创建了一个PHP REST API(提供“公司ID”和“API密钥”作为用户名/密码)。后来我们发现有必要配置与API密钥直接相关的会话密钥,只有到期时间。
基本上,我们在数据存储区(nosql品种:)中查询了不同类型的数据,具体取决于URL中提供的“方法”。我们使用CodeIgniter提供的“segment”功能来访问它。
然后我们用返回的“json_encode”包装每个响应,我们还使用HTTPS连接来保证安全。
对于客户端类,我们将所有内容都包含在$ client-> get_my_data($ api_key)之类的调用中,并使用PHP Libcurl在下面创建一个层,它可以很好地提供基本身份验证。
希望这有帮助,
CURL_GET
private function curl_get($url, $apikey, $co)
{
$curl_handle = curl_init();
curl_setopt($curl_handle, CURLOPT_URL, $url);
curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl_handle, CURLOPT_USERPWD, $co.":".$apikey);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_DNS_USE_GLOBAL_CACHE, FALSE);
$buffer = curl_exec($curl_handle);
$error = curl_error($curl_handle);
curl_close($curl_handle);
// check for success or failure
if (empty($buffer)) {
//echo 'Something went wrong :( error: '.$error.'<Br>';
} else {
return $buffer;
}
}
答案 5 :(得分:0)
你的问题比这个要大一些;但我可以提供一个关于REST的小观察。
我发现使用REST,就是最好使用人工密钥作为底层数据模型,而不是自然键。
例如,考虑一下RESTfull网址:https://server/yourApp/viewUser/1234.html
这会向用户显示ID为1234.但是,如果您使用自然键,则可能会有类似此https://server/yourApp/viewUser/Bob.html
的网址,或者更糟糕的是,如果不是Bob它的“Bob X”或“Bob?key = Value”。您不必考虑生成无效的网址。