5

我们正在尝试为我们的服务开发一个 API,并且我们对如何完成身份验证过程感到怀疑。我们的客户端必须能够包含一个与我们的 Node.js 服务器连接的 .js 文件。这里的关键点是我们的后端必须跟踪 API 的使用,以便我们的客户将根据其使用收费。

我们的目的是为用户设计尽可能简单的 API,并使其安全。我们曾想过:

  • 为每个用户创建一个 API_KEY 并在每个请求中将其与他们的域匹配。这里的问题可能是域不是最安全的选择,不是吗?我们知道域可能会在 HTTP 请求中被取代。

  • 使用带有 API_KEY 和 SECRET_KEY 的 SDK 为给定会话和用户生成令牌。我一点也不喜欢这个选项,但我们更喜欢为开发人员提供更简单的解决方案,这并不意味着使用多个 API。

你有什么想法/建议/考虑/什么?

提前致谢。

4

1 回答 1

3

我最喜欢你的第二个选择。除了 API_KEY 和 SECRET_KEY 你还可以做很多其他的事情。

首先确保所有请求都是通过 HTTPs 完成的。这是您可以添加的最重要的安全功能......而且它很容易做到。

其次,如果您想让事情变得超级安全,请从客户端发送时间戳。此时间戳可用于对 SECRET_KEY 进行哈希处理,为您提供防止有人重新创建数据的保护。

您的客户将在每个请求中发送以下内容:

1)时间戳 - 您将其存储在您的数据库中并拒绝任何具有较小数字的新请求

2) API_KEY - 本质上是一个用户 ID

3) 签名 - 这是 SECRET_KEY、时间戳和 API_KEY 的哈希值。(散列算法和参数顺序通常不重要。SHA1 相当不错)您的服务器可以计算此散列以验证此客户端实际上知道 SECRET_KEY。您的客户在任何时候都不应向任何人透露 SECRET_KEY。

您还可以查看 OAuth 标准。我相信一般来说 NodeJS 和 Javascript 都有它的库。 NodeJS OAuth 提供者

于 2013-04-15T21:05:05.610 回答