我正在考虑构建一个 API,并且正在考虑使用 oauth 来管理对 api 的访问,但我正在做的更多的是一个 b2b 系统,它允许企业访问数据以将其合并到他们的站点中。一开始我不会有任何b2c。
所以 oauth 对我来说似乎不是正确的工具,我一直在寻找有关构建基于密钥的系统的资源,但没有遇到任何问题。
那里已经有东西了吗?最好只创建一些用户提交的数据的哈希或类似的东西?
您需要的只是唯一标识用户的东西......只需使用 UUID 或 UUID 的哈希值。
只需确保此 ID 通过安全通道传递,如果您通过不安全通道传递它,您可能需要实现一些类似于 HTTP 摘要身份验证的方法来保护 ID。
看看几乎所有的 Web 2.0 站点/服务。他们都有不同程度的身份验证和管理 API 密钥。Flickr、Twitter、Github 等。
根据要求,在 web api 的世界中,为您的合作伙伴/开发人员提供 API 密钥(标识)并要求他们签署调用(身份验证)是非常标准的。有很多方法可以指定签名。这些天很常见的是;获取调用的所有参数、时间戳(+/- 5 分钟摆动)、共享密钥,并使用 SHA-1 或 MD5(SHA-1 更好)对其进行哈希处理。
您可以自己实施,也可以找一个合作伙伴(有几个)为您完成。
这里建议的一般方法(使用包含 API 密钥和当前时间的哈希)都很好 - 当然比在消息中包含“密码”更好。
但是,有一种称为 HMAC 的“绿”操作的加密标准方法。如果您想要更标准/强大/安全的东西,非常值得一看。
最后,显然有来自安全选项的“黄金标准”——使用数字证书来签署所有请求(计算成本可能很高)或用于签署初始请求,然后生成有限使用的会话密钥(例如,仅一个 API,使用60 分钟后到期)。
或者,您可以将 2-way SSL 用于传输层,并在应用程序/API 中简单地信任它。
真的取决于你想要它有多安全...... :]
我不会只使用用户提交的数据,因为这会造成 API 密钥可猜测的情况。通常,我会获取用户生成的一些数据,然后将其与一些相对唯一的数据(即当前系统时间)结合起来,并使用 SHA-1 或其他方法对其进行哈希处理,如果我不这样做,可能会更改表示希望它显然是一个 SHA-1 哈希,然后将其用作密钥。