我正在构建其他开发人员应该可以访问的 REST API。为了验证客户端,我决定使用 HMAC-SHA256 请求签名API 密钥和密钥。
所以认证的过程是这样的:
这里的一切都非常清晰和简单。但问题是: 我应该在哪里以及如何存储该密钥,它应该是所有客户端的唯一密钥还是每个客户端都不同。
我已经阅读了大量文章,其中有很多关于如何实现这种请求身份验证的好例子,但没有一篇文章告诉我应该如何存储密钥——在数据库或位于服务器 FS 的某个文档中。据我了解,不应加密API 密钥和秘密密钥。因为第一个仅用于识别或撤销客户端,第二个应该可以快速访问以供服务器创建和比较签名。
回到问题的第二部分,它应该是所有用户的唯一密钥还是每个用户的私有密钥?如果它是唯一的一个键,那么将它隐藏在服务器上很简单,例如在环境变量中。但是,如果它应该在客户端受到损害怎么办?在这种情况下,我应该更改密钥,它会阻止我所有其他客户端的 API...
我在这里找到了一些有关安全性和妥协效果的信息:使用 HMAC-SHA1 进行 API 身份验证 - 如何安全地存储客户端密码? 但仍然没有关于存储的有用信息。