RESTful API密钥建议

时间:2011-05-14 18:45:51

标签: api authentication rest web api-key

我正在寻找有关RESTful API设计的建议。我已经阅读了很多关于REST API方案,认证/授权方法等等。我无法决定是否真的需要使用API​​密钥。根据我的理解,使用API​​密钥非常有用,如果您想监控使用情况,限制每个应用程序的请求和统计数据。

我想避免的是必须创建额外的Web界面来添加/管理/删除应用程序以及添加/删除应用程序管理员。也许有一种更简单的方法来进行API密钥分发。或者我真的需要那些吗?我的意思是,监控和限制使用是很酷的,听起来很有用,但它还值得我为密钥分发做出的其他事情。

更具体地说,我的网站就像slidehare和scribd。我希望为其功能提供API访问权限,例如添加和管理文档以及获取有关用户的信息。因此,例如,要上传文件,您需要以某种方式进行身份验证并使用特定帐户来执行此操作。在这种情况下,API密钥是一项要求,还是我可以坚持认证用户?

那么您认为处理API密钥的最佳方式是什么?或者我应该使用它们?是否有更聪明的方法来分发(创建,删除)密钥?

提前致谢:)

2 个答案:

答案 0 :(得分:4)

你知道mashery http://www.mashery.com/和programmableweb吗?

也许有一些有用的资源 http://www.mashery.com/solution/collegeboard

http://www.3scale.net/

我会使用api密钥进行统计和限制,但也可以在没有api密钥的情况下为某些服务提供服务

您可以使用类似的解决方案轻松创建API
Restler http://luracast.com/products/restler/
弗拉皮http://getfrapi.com/
数据库http://thedatatank.com/
服务(仅适用于Drupal)http://drupal.org/project/services

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

答案 1 :(得分:2)

我也在上面的帖子中回答 - 但是空间不足。作为免责声明,我为3scale(http://www.3scale.net)工作,所以你可能想根据那个:)解析我的回复。

您的问题的答案实际上取决于您的API所展示的资源以及您希望跟踪/限制的内容。听起来大多数功能都与某种用户帐户相关联,但可以由第三方实施。

在这种情况下,最有用的模式可能是为每个调用API +用户凭据的应用程序提供标识符(公共或秘密)。应用程序标识符可以是APIKey或甚至只是名称(例如“tweetdeck”)。如果你最终得到了很多第三方应用程序,那么跟踪这些标识符(这意味着最少发布它们的方法)可能很有用,并且知道构建每个应用程序的人员+能够关闭它们(如果只关闭它们)那些滥用你的用户群的人。您可能还想对每个用户和应用在API上生成的流量进行限制,因此拥有标识符也很有用。

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

您在上面提到过,您并不热衷于外部服务 - 没问题,3scale可以通过实际对您的系统本地执行所有API auth来实现(例如使用其中一个代码插件:https://support.3scale.net/libraries或代理像Varnish:https://github.com/3scale/libvmod-3scale/)然后在云中跟踪。显然它不适合所有用例,但可以为您提供一堆开箱即用的有用工具。