为什么 API 使用 API 密钥而不是用户名?

信息安全 验证 密钥管理 休息
2021-08-17 21:31:29

现在,在处理 API 时,通常使用 API 密钥来识别代理。与使用开发人员指定的用户名相比,这样做有什么好处?仅仅是 API Key 比较难猜,还是有更深层次的原因?

4个回答

我可以想到您可能使用密钥的多种原因:

  • 防止猜测,尤其是当密钥作为身份验证的一部分时。这就是特里的回答试图告诉你的 - 为什么允许恶意用户简单地从字典中尝试多个用户名,当你可以让他们搜索大地址空间时(它需要非常大,大于 128 位至少)。结合速率限制和 IP 阻止,您将过滤掉大量攻击。
  • 如果用户名是公开的,则防止用户的帐户被盗用。如果我的用户名是antony并且我的 API 密钥是antony,那太好了,你就成功了一半。但是,如果我的 API 密钥是随机的,它就会变得更加困难(参见第 1 点)。
  • 允许多个设备访问系统并通过扩展为设备启用一种访问控制。如果您有一个令人难忘的用户名作为您的 API 密钥,那么除非有相应的 API 密钥,否则这将很难撤销。如果您使用 API 机密,则拥有每个设备的机密可以实现类似的效果。
  • 防止泄露的密钥以任何方式识别用户。当然,如果应用程序或设备的内容识别了用户,这完全没有用。

这份清单可能并不详尽。

正如其他人所说,它为每个用户创建唯一的 ID。

但对于AWS来说,“请求身份验证,AWSAccessKeyId 元素标识用于计算签名的密钥,以及(间接)发出请求的开发人员。”

在我看到的大多数系统中,API 密钥不仅仅作为一种识别手段。它们通常兼作身份验证的手段。

开发人员不会为他提出的每个请求都输入 API 密钥。密钥可能会存储在某处的代码或配置文件中。允许开发人员通过随机 API 密钥选择一个容易记住的用户名和密码组合是没有意义的。

API 密钥只是用来识别发出请求的服务。我不知道他们有什么特别的原因,除了因为分发随机密钥而不是用户名更容易,因为它都是由计算机处理的,它避免了人们想要相同的问题用户名。

也许也有可能选择用户名具有欺骗性的情况。我不确定这会有多有效,因为它不是普通用户会看到的东西,我希望更有经验的用户不会喜欢它,但如果你可以让你的 Facebook API 用户名“FacebookAdmin”它会不是特别好。