安全API的最佳实践?

时间:2010-03-12 18:09:07

标签: php ajax api openid oauth

假设我的网站上有很多关于我们产品的信息。我希望我们的一些客户(包括我们!)能够通过各种方法查找我们的产品,包括:

1)从AJAX调用中提取数据,这些调用以很酷的JavaScripty方式返回数据 2)创建使用该数据的iPhone应用程序; 3)让其他Web应用程序将这些数据用于自己的目的。

通常,我只是创建一个API并完成它。然而,这些数据实际上是轻微保密的 - 也就是说我们不希望我们的竞争对手每天早上都能查看我们的所有产品,然后自动设定价格来削弱我们。我们还希望能够看到谁可能滥用系统,所以如果有人每天要对我们的API进行一千万次复杂的调用并使我们的服务器陷入困境,我们就可以将其删除。

我的下一个逻辑步骤是创建开发人员的密钥以限制访问 - 这对于Web应用程序可以正常工作,但对于任何AJAX调用都没有那么多。 (正如我所看到的,他们需要提供JavaScript中的密钥,这是明文和容易看到的,因此实际上根本没有安全性。特别是如果我们在我们的网站上使用我们自己的开发人员密钥进行这些AJAX调用。)

所以我的问题是:在浏览了Oauth和OpenID一段时间之后,我不确定是否有一个解决方案可以处理上述所有这三个问题。对于开发人员的密钥,是否存在某种规范的“最佳实践”,或者Oauth和OpenID能否以某种方式轻松处理AJAX调用,或者我还缺少某些东西?

3 个答案:

答案 0 :(得分:5)

我认为你想要满足#2和#3的双腿OAuth。对于#1,我建议客户不是直接针对您的应用程序发出JS请求,而是通过他们自己的Web应用程序代理这些请求。

答案 1 :(得分:1)

中途解决方案是需要API密钥;然后要求任何人使用它并不直接使用它与AJAX;但是将它们的调用包装在服务器端请求中,例如:

AJAX -> customer server -> your server -> customer server -> user

为感兴趣的各方创建一个简单的PHP API应该不会太棘手,而且你自己的iPhone应用程序显然会切断中间人,使用自己的API密钥发送。

答案 2 :(得分:1)

OAuth和OpenID不太可能直接与AJAX调用有很大关系。最有可能的是,您将在AJAX处理程序前面使用某种授权过滤器来检查cookie,并且可能是由于OpenID身份验证而设置的。

这似乎归结为“how do I prevent screen scraping”的问题。如果只有登录的客户可以看到价格,这是一回事,但假设您像大多数零售网站一样,并且您对客户注册的障碍尽可能低,那实际上并没有帮助。

而且,嘿,如果你的价格,你就不会出现在像Froogle或Nextag或PriceGrabber这样的搜索引擎中。但这更多的是商业战略决策,而不是编程决策。