你如何管理api密钥

时间:2008-12-31 21:04:48

标签: php api oauth key

我正在考虑构建一个API并且考虑使用oauth来管理对api的访问,但我正在做的更多的是一个b2b系统,允许企业访问数据以合并到他们的网站中。我一开始不会有任何b2c。

所以oauth对我来说似乎不是一个合适的工具,我一直在寻找有关构建基于密钥的系统的资源,但没有遇到任何问题。

那里有可用的东西吗? 是否最好只创建一些用户提交的数据的散列或类似的东西?

5 个答案:

答案 0 :(得分:2)

您需要的只是唯一标识用户的东西......只需使用UUID或UUID的哈希值。

只需确保此ID通过安全通道传递,如果您通过不安全的通道传递此ID,则可能需要实施一些保护ID的方法,类似于HTTP摘要身份验证。

答案 1 :(得分:1)

查看几乎所有Web 2.0站点/服务。他们都有不同程度的auth和管理API密钥。 Flickr,Twitter,Github等

答案 2 :(得分:1)

根据要求,在web api的世界中,为您的合作伙伴/开发人员提供API密钥(标识)并要求他们签署呼叫(身份验证)是非常标准的。有很多方法可以指定签名。这些天很常见的是;获取呼叫的所有参数,时间戳(+/- 5分钟摆动),共享密钥,并使用SHA-1或MD5(SHA-1更好)散列它。

你可以自己实现这个,也可以找一个合作伙伴(有几个)为你做这件事。

答案 3 :(得分:1)

这里建议的一般方法(使用包含API密钥和当前时间的哈希)都很好 - 当然比在邮件中包含“密码”更好。

然而,有一种称为HMAC的“mung”操作的加密标准方法。非常值得一看,如果你想要更标准/更健壮/更安全的东西。

最后,安全选项中显然存在“黄金标准” - 使用数字证书对所有请求进行签名(计算成本可能很高)或使用签名初始请求然后生成限制使用会话密钥(例如一个API)只有,60分钟后到期)。

或者,您可以使用双向SSL作为传输层,只需信任它在应用程序/ API中。

真的取决于你想要它的安全性......:]

答案 4 :(得分:0)

我不会只使用用户提交的数据,因为这可能会产生API密钥可猜测的情况。通常,我会获取用户生成的一些数据,然后将它与一些相对独特的数据(即当前系统时间)和使用SHA-1或其他内容的哈希相结合,如果我不这样做,可能会更改表示希望它显然是一个SHA-1哈希,然后用它作为密钥。