HMAC是一种加密算法,作为更大协议的一部分是有意义的;你不应该直接摆弄它。当您使用 HTTPS 时,SSL 层实际上包括一些 HMAC(以及其他算法)。
OAuth是一种授权标准,其主要用例是在不共享凭据的情况下管理用户身份验证——这个想法是一个用户可以拥有单个服务器已知的凭据(“密码”的大词),可以用来由其他几台服务器授予访问权限,但没有足够信任它们以显示实际密码。比如说,服务器S和T信任身份验证服务器A,用户U也信任A足以显示他的密码(在某些 HTTPS 连接内),并且S和T与A交谈以确保用户U确实是他自称的那个人;好的部分是S和T永远不会看到密码,而U不需要信任它们。
在你的情况下,你有一个“用户”(你的服务器H),因为那是一台机器,它不需要对他的密码挑剔;H可以有一个“密码”(一长串随机字符),H将仅使用它来向O进行身份验证,因此不需要 OAuth 的额外复杂性。
这里的固有漏洞是服务器H可以访问敏感数据。这是设计使然,但这意味着数据会发送到托管服务器,这意味着您相信托管服务不会偷看您的数据或不小心泄露数据。根据您的问题定义,您无法回避这一点。您基本上认为服务器H本身是安全的,不会被窃听和恶意更改。在这些条件下,在 HTTPS 中运行 HTTP 的“基本”身份验证就可以了。
您可能想要加强一点服务器身份验证:机器H需要确保它与真正的O服务器通信,这通常需要证书验证。您可以将H配置为“直接信任”,即在H中导入O证书的副本(只是公共证书,而不是私钥),并指示H信任该特定证书而不是其他证书。这可以避免证书颁发机构的问题,特别是允许安全使用自签名证书,这些证书很便宜(因为您不必为此类证书支付 CA 费用)。