API REST 键

API Keys for REST

所以我正在开发 RESTful API,但我一辈子都无法理解 API 键的工作原理。我正在使用 PHP,它有一个 HMAC 函数,我读过它是一种签署请求的好方法,但我不明白的是如下。

我不打算将 API 密钥发送给客户端,但假设使用 HMAC 的客户端接收消息,该消息通常是请求中涉及的元素数组和 API 键。如果用户不应该拥有 API 密钥,user/client 如何进行包含 API 密钥的签名?

看看广泛使用 API 的公司是如何处理这个问题的。一个很好的例子是 Google or Dropbox.

你会发现在某些时候你需要一些信息

  • 从某个地方获取(在 Google - the API Console 的情况下)并用作身份验证的一部分(这通常是您提到的密钥);这通常用于应用程序到应用程序的通信
  • 或使用基于用户的身份验证协议,如 oAuth

在你的情况下,要走的路是 oAuth,用户自己不存储任何东西(为他们存储了一个 cookie,但他们不知道)。然后,您可以使用第三方系统(Google、Twitter、LinkedIn 等)来代表您处理身份验证。

API 密钥通常用于在多租户环境中识别特定用户的 environment/privilages。

比如说,你有一个应用程序,其中有三个客户 A、B 和 C。所有三个客户都有完全不同的设置/使用不同的功能等。

现在说,如果你想在客户 C 下创建一个新用户,客户 C 的唯一 API 键将用于识别下面用户的设置/资源/environment/privilages C.

所以除非我弄错了,否则我误解了 API 密钥的固有概念,因为我应该能够将 API 密钥提供给已验证其用户名的用户和密码并从那里使用密钥。我认为这甚至不是最安全或最好的方法,但在实施 Parth Shah 提到的 HTTPS 之后,我认为我的大部分问题都将得到避免,我可以开始为我的 [=12= 实施基本身份验证程序的开始] 我不会收到用户名和密码的电话。