RESTful API密钥建议

5
我正在寻求有关RESTful API设计的建议。我已经阅读了很多关于REST API方案、身份验证/授权等方面的内容。我无法确定的是,我是否真的需要使用API密钥。据我所知,使用API密钥可以用于监视使用情况、限制每个应用程序的请求以及获取统计数据。
我想避免创建额外的Web界面来添加/管理/删除应用程序和添加/删除应用程序管理员。也许有一种更简单的方法来分发API密钥。或者我真的需要它们吗?我的意思是,监视和限制使用情况听起来很酷,看起来很有用,但是这是否值得我为密钥分发而做的其他事情?
更具体地说,我的网站类似于slideshare和scribd。我想给予API访问其功能,例如添加和管理文档以及获取有关用户的信息。因此,例如要上传文件,您需要通过某种方式进行身份验证并使用特定账户进行操作。在这种情况下,API密钥是必需品,还是我只需对用户进行身份验证即可?
那么,您认为最好的处理API密钥的方法是什么?或者我是否应该使用它们?是否有更聪明的方法来分发(创建、删除)密钥?
提前感谢您的帮助 :)
2个回答

4

你知道Mashery http://www.mashery.com/和ProgrammableWeb吗?也许这些资源会有所帮助http://www.mashery.com/solution/collegeboard,以及http://www.3scale.net/

我会使用API密钥来进行统计和限制,但也会像Google一样提供一些不需要API密钥的服务。

你可以使用像Restler http://luracast.com/products/restler/、Frapi http://getfrapi.com/和The Datatank http://thedatatank.com/这样的解决方案轻松创建API。
Services(仅适用于Drupal)http://drupal.org/project/services

还有一些:http://blog.programmableweb.com/2011/09/23/short-list-of-restful-api-frameworks-for-php/


我查看了你在这里放置的链接。我不想使用外部服务(即使它们是免费的)。至于对某些服务使用API密钥而对其他服务不使用,这是否有违API密钥的目的? - stormbreaker
谷歌已经这样做了好几年,还有许多其他公司也是如此。那么你也必须编写自己的 API 管理软件(如果在 Web、SourceForge 等网站上不存在)。使用 API 密钥来限制所有内容(不知道你的主机是谁)更好,这样你可以完全控制使用情况,因此软件被滥用的风险更低,安全性更高。或者每个人都可以在没有 API 密钥的情况下使用它,并且可以随心所欲地使用它(并最终通过每小时太多的请求使您的服务器崩溃)。我认为安全性更重要。 - user753676
好的,你已经回答了为什么我应该使用 API 密钥。那么怎样使用呢?如果我向每个请求密钥的人都提供一个 API 密钥,他们不是可以随意更换密钥并做出一些坏事吗? - stormbreaker
还有其他一些事情,比如服务器IP、用户IP等,你也可以检查。 - user753676
如果您发行具有大量通用权限的API密钥,那么显然它们可能会被攻击并授予他人权限。但这并不意味着它们无效 - 您可以使用不同的身份验证模式 - API密钥、ID +密钥、应用程序密钥、oAuth和用户登录,每个模式都可以有限制。听起来您的应用程序有最终用户,因此最好记录第三方应用程序的标识以及正在访问的用户帐户的标识。 - steve

2

我在上面的帖子中也回答了这个问题,但是空间不够了。作为免责声明,我为3scale(http://www.3scale.net)工作,所以您可能需要根据此解析我的回答 :)

你的问题的答案实际上取决于你的API公开的资源和你想要跟踪/限制什么。听起来大多数功能都与某种用户帐户绑定,但可以由第三方实现。

在这种情况下,最有用的模式可能是为调用API的每个应用程序设置一个标识符(公共或秘密)+用户凭据。应用程序标识符可以是APIKey,甚至只是一个名称(例如“tweetdeck”)。如果您最终有很多第三方应用程序,则跟踪这些标识符(这意味着至少有一种发行它们的方式)并知道谁构建了每个应用程序+具有关闭它们的能力(即使只是关闭滥用您的用户基础的应用程序),可能也很有用。您还可能希望评估限制每个用户和应用程序可以在API上生成的流量量,因此拥有标识符再次非常有用。

此外,如果您正在验证用户,但允许第三方编写您的用户使用的应用程序,请务必考虑oAuth(http://www.oauth.net),以避免恶意代码/站点捕获您的用户密码。

您在上面提到您不喜欢外部服务 - 没问题,3scale通过实际在您的系统中进行所有API身份验证(例如使用其中一个代码插件:https://support.3scale.net/libraries或在代理中像Varnish:https://github.com/3scale/libvmod-3scale/)然后在云中进行跟踪。显然,它并不适合所有用例,但可以为您提供一堆有用的工具。


谢谢!如果我需要再次制作类似的项目,我会考虑使用3scale。因为我之前询问的那个项目已经完成了。 - stormbreaker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接