在 https 安全下休息 API

Rest API under https security

我是新手,需要指导才能提出正确的问题。这是交易:

我在 HTTPS 下开发了 REST API。

用户必须提供有效的令牌才能使用 API。

令牌在超过 5 分钟未使用后过期。

要获得令牌,客户端必须调用身份验证API,传递他的私人主密钥或辅助密钥,以及他的用户号码。

每个键都是唯一的,在数据​​库中我保存它的哈希值。 用户使用键“pk”或“sk”和“usernumber”通过 header 传递他的主键或辅助键。

服务器将获取这些密钥并发送到数据库,数据库将应用哈希并检查它们是否有效。

一旦密钥有效,就会在数据库中生成令牌本身,并返回给用户。

我担心在 header 上传递主键或辅助键。我不确定是否有人可以从外部获取这些数据,也不确定这是否是最佳做法。我正在尝试获得一些指导,并且遇到了基本身份验证、oauth 和其他人。但它们似乎都在 HTTP 上。 我没有找到太多关于 API HTTPS 的信息,所以我也需要一些指导。我可以让我的 API 只接受 https 请求吗?如果是,是否适用相同的安全规则?

提前致谢。

首先:关于 HTTPS VS HTTP。

HTTPS 是基于 TLS 的 HTTP,其中 TLS 是用于保护通信通道的另一层保护。所有关于 headers 的 HTTP 规则也适用于 HTTPS。 TLS 将保护您的数据机密性和完整性。它将保护整个 HTTP 请求,包括 headers 和 body.

将机密传递视为 headers。

可以将机密作为 headers 或 body 传递。在 URL 中传递秘密是不行的。沿途注销服务器和代理服务器上的秘密是不对的。除非真正需要,否则实现自己的身份验证机制是不​​行的。

如果您想详细了解保护通信通道(以及应用程序的其余部分)所需的内容,请查看 OWASP Application Security Verification Standard

有 4 个安全方面需要考虑。大多数框架都定义了身份验证和授权的流程。一些框架也通过签名定义完整性。

但几乎所有人都严重依赖加密数据来实现机密性。即,如果通信基于 HTTP

,他们推荐使用 HTTPS
  • 身份验证:

    识别谁在与您的 API 通话。

  • 授权:

    一旦您确定了谁在与您的 API 交谈,请确保他们有与之交谈的权限。如果身份验证就像检查某人的身份并允许他们进入建筑物。然后授权就像允许他们进入他们有访问代码的房间。

  • 诚信度: 一个你知道你在和谁说话以及他们被允许做什么的人,你仍然需要确保你收到的数据来自他们而不是被篡改的数据。

  • 保密 可能他们并没有篡改数据,而是通过网络读取所有数据,以便稍后他们可以使用该数据并假装是您信任的人。所以除了发送者和接收者之外没有其他人可以看到数据。

注:

  • 以上4个方面是为了流量上的安全

  • 您还必须考虑静态安全性。您似乎在服务器端针对这方面进行了强大的设计。

  • 你有没有想过当令牌在5分钟后过期时你会怎么做。您的用户不会乐意每 5 分钟输入一次用户编号和主 key/secondary 密钥。而且,如果您计划将其存储在客户端,以便每 5 分钟自动执行一次,那么您必须考虑将其存储在客户端的什么位置以及静态方面的安全性