相关疑难解决方法(0)

如何以及在何处使用基于 HMAC 的签名存储 REST API 的密钥

我正在构建其他开发人员应该可以访问的 REST API。为了验证客户端,我决定使用 HMAC-SHA256 请求签名API 密钥密钥

所以认证的过程是这样的:

  1. 与请求正文一起,客户端发送标头,其中包含使用一些数据(请求正文/日期/等)+密钥生成的API 密钥和签名
  2. 服务器接收请求并检查API 密钥是否有效且未被撤销
  3. 服务器从某处获取密钥并通过与客户端相同的算法生成签名
  4. 如果两个签名(从客户端收到并在服务器上生成)相同,则请求通过身份验证

这里的一切都非常清晰和简单。但问题是: 我应该在哪里以及如何存储该密钥,它应该是所有客户端的唯一密钥还是每个客户端都不同

我已经阅读了大量文章,其中有很多关于如何实现这种请求身份验证的好例子,但没有一篇文章告诉我应该如何存储密钥——在数据库或位于服务器 FS 的某个文档中。据我了解,不应加密API 密钥秘密密钥。因为第一个仅用于识别或撤销客户端,第二个应该可以快速访问以供服务器创建和比较签名。

回到问题的第二部分,它应该是所有用户的唯一密钥还是每个用户的私有密钥?如果它是唯一的一个键,那么将它隐藏在服务器上很简单,例如在环境变量中。但是,如果它应该在客户端受到损害怎么办?在这种情况下,我应该更改密钥,它会阻止我所有其他客户端的 API...

我在这里找到了一些有关安全性和妥协效果的信息:使用 HMAC-SHA1 进行 API 身份验证 - 如何安全地存储客户端密码? 但仍然没有关于存储的有用信息。

api rest hmac

5
推荐指数
1
解决办法
1234
查看次数

RESTful身份验证作为一种状态

不可能有鉴定无状态.因此,在使用身份验证设计RESTful软件时,为了安全起见,我们是否会妥协这种架构?这可以走多远?只要能够构建更安全的系统,您能存储任何数量的状态吗?

表示状态转移或REST具有许多核心设计概念.其中最重要的一点是REST必须是无状态的或引用Wikipeida:

"......处于休眠状态的客户端能够与其用户进行交互,但不会产生负载,也不会消耗服务器或网络上的每个客户端存储."

但是,根据定义,用户名和密码是客户端特有的状态,可能会发生变化.此外,客户端可以具有被认证的状态,否则他们将具有有限的访问权限或者没有访问权限.

security authentication rest

4
推荐指数
1
解决办法
1013
查看次数

标签 统计

rest ×2

api ×1

authentication ×1

hmac ×1

security ×1