【发布时间】:2011-03-23 02:02:52
【问题描述】:
我正在开发一个可供我的客户的用户使用的 API。流程如下所示:
- 我的基于云的服务的用户创建了一个 API 密钥。
- 用户将 API 密钥嵌入到他们自己的自定义应用程序中。
- 用户将应用程序部署给自己的最终用户。
- 应用程序与我们的 API 对话。
我正在寻求有关如何保护此 API 的建议。我发现了一些问题:
- API 密钥必须嵌入到用户应用程序中,因此容易被窃取和滥用。
- 一旦 API 密钥遭到破坏,就可以轻松将其禁用,但我的用户将如何更新他们的应用程序以使用新的 API 密钥,而不必重新构建应用程序并重新部署。
有人对如何设计这个有任何想法吗?
【问题讨论】:
-
您的问题 1:必须嵌入 API 密钥...这是为什么呢?您使用什么语言/平台?
-
API 不能完全开放。我代表我的系统用户从应用程序收集信息。所以我需要确保这些信息是合法的,并且它进入了我们系统中的正确账户。这有意义吗?
-
Eric,你最终是如何很好地实现这一点的?我能想到的每一种保护 API 的方法都需要某种形式的公钥/私钥,而这些公钥/私钥都会受到这种安全漏洞的影响。我特别想到了今年早些时候下载/转发的那些带有恶意软件的 Android 应用程序。 FWIW,Twitter 似乎通过为每个应用程序而不是每个帐户发布公钥/私钥来解决这个问题,所以如果一个应用程序受到攻击,整个应用程序将被关闭,直到推出具有新密钥的新版本出去。 dev.twitter.com/pages/auth
-
每个客户都获得了他们产品的公共 api 密钥,他们尽最大努力保证这个 api 密钥的安全,但要保证它完全安全是不可能的。因此,当应用程序请求允许将案例提交到我们的 API 时,他们会出示该 API 密钥,然后他们会收到一个 oauth 令牌作为交换。我们跟踪可能滥用我们的任何 IP,并且我们使用 SSL 进行所有通信。用户还可以禁用和创建新的 API 密钥。这似乎是我们能做的最好的了。
-
埃里克,感谢您的澄清。听起来是一种完全合理(且安全)的方法。