3

我已经创建了一个 Web 应用程序,现在我想构建一些 REST API 以使其可由第三方开发人员进行编程。然后,我想用一些流行的语言(JavaScript、PHP、Ruby 等)构建一些客户端库,通过避免他们手动解析每个请求的 JSON 响应,使开发人员能够舒适地使用我的服务。

我以前从未构建过 API 基础架构,所以我有以下问题。我想跟踪第三方开发人员调用的 API 方法的使用情况。每个开发人员在使用 API 之前都必须进行注册,因此我想将每个请求与注册的开发人员相关联(因此,设置一些特定的使用限制等)。

我想为每个开发人员创建一个唯一的 api 密钥,他可以在他的所有应用程序中使用它来验证请求。但后来我意识到,如果他决定使用我的 javascript 包装器,那么恶意用户可以查看客户端应用程序页面的源代码并获取他的 api 密钥。因此,我决定最好为每个应用程序创建一个唯一的 api 密钥,并与托管客户端应用程序的域相关联。因此,即使用户抓住了其他人的密钥,那么它在最初注册的域之外也是无用的。但后来我想:移动应用程序呢?如果不是从网站拨打电话会发生什么?如果没有域或 IP 地址不是静态的,我如何通过其域验证密钥?

有小费吗?

谢谢!

4

1 回答 1

1

马可。不确定您是否仍在为此工作,但以防万一:如果您的主要目标是跟踪来自不同站点的 API 的使用情况,那么您可以为每个开发人员分配一个唯一的 API 密钥。然而,在 JavaScript 的情况下,请求不会来自那个开发者;它将来自最终用户的计算机(假设您使用JSONP来绕过 JavaScript 中的同域策略)。您可能可以使用 HTTP_REFERER 强制执行域限制(即您从 1.2.3.4.comcast.net 收到请求,但其 HTTP_REFERER 是 www.developer.com),但显然一个确定的恶意用户可能会欺骗该 REFERER。

另一种选择可能是避免使用 JSONP 并使 JavaScript 库带有本地代理。这样,AJAX 调用将从用户的浏览器转到开发人员的服务器(使用会话 cookie/crumb 进行验证),然后开发人员的服务器与您的服务器联系(这很容易受到 IP 限制和/或使用强身份验证)。

希望有帮助。

于 2010-10-26T00:58:45.860 回答