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

时间:2013-04-15 18:35:11

标签: javascript api security authentication authorization

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

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

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

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

您有任何想法/建议/考虑因素/其他吗?

提前致谢。

1 个答案:

答案 0 :(得分: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 Provider