【问题标题】:RESTful API keys suggestions [closed]RESTful API 密钥建议 [关闭]
【发布时间】:2011-08-25 15:12:35
【问题描述】:

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

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

更具体地说,我的网站类似于 slideshare 和 scribd。我想让 API 访问其功能,例如添加和管理文档以及获取有关用户的信息。因此,例如要上传文件,您需要以某种方式进行身份验证并使用特定帐户来执行此操作。在这种情况下,是否需要 API 密钥,或者我可以坚持对用户进行身份验证?

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

提前致谢:)

【问题讨论】:

    标签: api authentication rest web api-key


    【解决方案1】:

    你知道 mashery http://www.mashery.com/ 和可编程网络吗?

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

    http://www.3scale.net/

    我会使用 api 密钥进行统计和限制,但也会像谷歌那样提供一些没有 api 密钥的服务

    您可以使用以下解决方案轻松创建 API
    休息者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/

    【讨论】:

    • 我检查了你放在这里的那些链接。我不想使用外部服务(即使它们是免费的)。而对于某些服务使用 api 密钥而不为其他服务使用它,这不是违背了 API 密钥的目的吗?
    • 好吧,谷歌已经这样做了好几年了,还有很多其他的,比你还要写你自己的(如果在 web sourceforge 等周围不存在的话)api 管理软件。使用 api 密钥限制所有内容(不知道您的主机是谁)要好得多,因此您可以完全控制使用情况,因此滥用软件的风险要低得多,安全性要高得多。或者每个人都可以在没有 api 密钥的情况下使用它,并且可以做任何他们想做的事情(最终以每小时的请求数关闭你的服务器)。我认为安全性更重要。
    • 好的,你回答了为什么我应该使用 API 密钥。使用方法如何?如果我将 API 提供给每个请求 API 的人,他们不会允许他们切换这些 API 并仍然做坏事吗?
    • 还有一些其他的东西,比如服务器 ip、用户 ip 等等,你也可以检查一下
    • 如果您发布的 API 密钥具有很多一揽子权利,那么显然它们可能会受到损害,并且这些权利会授予其他人。但这并不会使它们无效 - 您可以使用不同的身份验证模式 - API 密钥、ID + 密钥、应用程序密钥、oAuth 和用户登录,每个都可能有限制。听起来您的应用程序有最终用户,因此最好记录 3rd 方应用程序的身份以及被访问的用户帐户的身份。
    【解决方案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,因为我询问的项目已经完成。
    猜你喜欢
    • 2017-10-17
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2010-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多