我正在构建一个使用 API 密钥进行身份验证的 REST API。我想确保这些 API 密钥安全地存储在我的数据库中。如果我要存储用户密码,我会使用 Argon2id 进行哈希处理。对于其他类型需要解密的敏感用户数据,我会考虑使用 AES 加密。
但是,我不确定存储 API 密钥的最佳实践。具体来说,我想知道:
我查看了 OWASP 指南,但找不到关于此主题的明确建议。
API 密钥是密码。它与典型的人类密码具有不同的特征,但它是一个允许持有者进行身份验证的字符串。
所以应该是:
无论谁遇到API密钥都会知道它。您的系统应该有一个 API 端点,它将用真实的 API 密钥交换临时 API 密钥(管理员和开发人员已知)。
协议很简单:
您可以使用上述机制来实现管理员对密钥的轮换。他们只需进入并更改 API 密钥即可完成。不必向他们出示钥匙。
如果您认为 API 密钥已被泄露,那么您将返回到最初的入门流程。管理员将看到新的 API 密钥,该密钥会传递给开发人员并在应用程序中进行配置。使用它会返回 401,从而触发上述过程。
+如果开发人员可以轻松地从生产配置中读取密钥,那就是另一个问题了。