如何将 REST API 的 API 密钥安全地存储在数据库中?

问题描述 投票:0回答:1

我正在构建一个使用 API 密钥进行身份验证的 REST API。我想确保这些 API 密钥安全地存储在我的数据库中。如果我要存储用户密码,我会使用 Argon2id 进行哈希处理。对于其他类型需要解密的敏感用户数据,我会考虑使用 AES 加密。

但是,我不确定存储 API 密钥的最佳实践。具体来说,我想知道:

  1. 我是否应该在将 API 密钥存储到数据库之前对其进行哈希处理,类似于用户密码?
  2. 如果建议使用散列,什么算法最适合此目的?
  3. 安全存储和管理 API 密钥是否有与处理密码或其他敏感数据不同的具体注意事项或最佳实践?

我查看了 OWASP 指南,但找不到关于此主题的明确建议。

rest security api-key
1个回答
0
投票

API 密钥是密码。它与典型的人类密码具有不同的特征,但它是一个允许持有者进行身份验证的字符串。

所以应该是:

  1. 完全随机,并非源自帐户 ID 或任何其他标识符
  2. 使用单向函数存储,[带有推荐参数的Argon2id](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html)就可以了。
  3. 首次使用时自动轮换 API 密钥
  4. 管理员可以在发生泄露时更改 API 密钥。

自动旋转

无论谁遇到API密钥都会知道它。您的系统应该有一个 API 端点,它将用真实的 API 密钥交换临时 API 密钥(管理员和开发人员已知)。

协议很简单:

  1. 当使用需要更改的 API 进行 API 调用时,您会返回 401 错误代码。
  2. 应用程序具有通过调用“更新密钥”API 来处理错误的逻辑。
  3. 应用程序获取新的 API 密钥并存储它,无需人工干预
  4. 重试 API 调用。

更改 API 密钥以防遭到泄露

您可以使用上述机制来实现管理员对密钥的轮换。他们只需进入并更改 API 密钥即可完成。不必向他们出示钥匙。

如果您认为 API 密钥已被泄露,那么您将返回到最初的入门流程。管理员将看到新的 API 密钥,该密钥会传递给开发人员并在应用程序中进行配置。使用它会返回 401,从而触发上述过程。

+如果开发人员可以轻松地从生产配置中读取密钥,那就是另一个问题了。

© www.soinside.com 2019 - 2024. All rights reserved.