如何在 Javascript API 中完成安全身份验证

Rub*_*nez 5 javascript security authentication api authorization

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

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

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

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

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

提前致谢。

Gun*_*man 3

我最喜欢你的第二个选择。除了 API_KEY 和 SECRET_KEY 之外,您还可以执行许多其他操作。

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

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

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

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

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

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

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

  • 仅在 JavaScript 中处理时是否可以避免向任何用户(包括实际用户)泄露 SECRET_KEY? (2认同)