REST api 的安全性(用户/pass auth vs hmac vs oauth)

信息安全 验证 休息 hmac
2021-08-28 05:39:53

我有两台服务器(一台在 Hetzner 上(我称之为 H),另一台在我的办公室(称之为 O))。我需要在 O 上运行一个基本的 CRUD Web 服务,该服务的唯一消费者是 H。O 上的数据是敏感的用户数据。这是一项临时的管道胶带服务,将来会随着对服务器 O 的需求而消失。

这是我的想法:

  1. 服务将在 https 上运行
  2. 用于请求身份验证的基本 HTTP 身份验证
  3. 通过 iptables 只为 H 的 ip 打开 O 上的端口。

我想知道它是否听起来足够安全,或者是否有什么我可能忽略的?与这种方法相比,HMAC 或 OAuth 有什么优势吗?

1个回答

HMAC是一种加密算法,作为更大协议的一部分是有意义的;你不应该直接摆弄它。当您使用 HTTPS 时,SSL 层实际上包括一些 HMAC(以及其他算法)。

OAuth是一种授权标准,其主要用例是在不共享凭据的情况下管理用户身份验证——这个想法是一个用户可以拥有单个服务器已知的凭据(“密码”的大词),可以用来由其他台服务器授予访问权限,但没有足够信任它们以显示实际密码。比如说,服务器ST信任身份验证服务器A,用户U也信任A足以显示他的密码(在某些 HTTPS 连接内),并且ST与A交谈以确保用户U确实是他自称的那个人;好的部分是ST永远不会看到密码,而U不需要信任它们

在你的情况下,你有一个“用户”(你的服务器H),因为那是一台机器,它不需要对他的密码挑剔;H可以有一个“密码”(一长串随机字符),H将仅使用它来向O进行身份验证,因此不需要 OAuth 的额外复杂性。

这里的固有漏洞是服务器H可以访问敏感数据。这是设计使然,但这意味着数据会发送到托管服务器,这意味着您相信托管服务不会偷看您的数据或不小心泄露数据。根据您的问题定义,您无法回避这一点。您基本上认为服务器H本身是安全的,不会被窃听和恶意更改。在这些条件下,在 HTTPS 中运行 HTTP 的“基本”身份验证就可以了

您可能想要加强一点服务器身份验证:机器H需要确保它与真正的O服务器通信,这通常需要证书验证。您可以将H配置为“直接信任”,即在H中导入O证书的副本(只是公共证书,而不是私钥),并指示H信任该特定证书而不是其他证书。这可以避免证书颁发机构的问题,特别是允许安全使用自签名证书,这些证书很便宜(因为您不必为此类证书支付 CA 费用)。