【发布时间】:2012-06-27 13:34:33
【问题描述】:
如果所有 api 调用都通过 https 发送,HMAC 是否会增加任何额外的安全性?例如,在 oauth 2 中,客户端将其密钥发送给提供者,而无需任何散列。这是否被认为是安全的,因为它是通过 https 的?虽然不是严格的 oauth,但在此调用中使用 HMAC 会使 oauth 2 更安全吗?如果是这样,为什么这不是 oauth 2 的标准部分?
【问题讨论】:
如果所有 api 调用都通过 https 发送,HMAC 是否会增加任何额外的安全性?例如,在 oauth 2 中,客户端将其密钥发送给提供者,而无需任何散列。这是否被认为是安全的,因为它是通过 https 的?虽然不是严格的 oauth,但在此调用中使用 HMAC 会使 oauth 2 更安全吗?如果是这样,为什么这不是 oauth 2 的标准部分?
【问题讨论】:
OAuth 2 标准要求授权服务器必须在其所有端点上使用 HTTPS,并且客户端应该使用受 HTTPS 保护的回调。由于消息内容(考虑 OAuth 的标头、查询参数和片段)只有服务器和客户端知道,所以使用 HTTPS 连接被认为是安全的。因此,对授权请求使用单独的签名没有任何好处,这就是为什么标准中甚至没有提到这样的签名。
但这不一定适用于响应。如果客户端收到对未受保护回调的授权响应,则无法验证其有效性。在这种情况下,攻击者可以向客户端发送任意授权结果。添加带有回调参数的签名,您可以避免这种情况。但是,使用带有 HTTPS 回调的相互客户端/服务器身份验证似乎是一个更好的解决方案。
虽然在授权期间使用签名并没有真正的好处,但它们可能有助于访问受保护的资源以避免窃取访问令牌。这就是标准中包含 MAC 令牌类型的原因,请参阅 section 7.1。
【讨论】:
HMAC 用于确定您是谁的身份验证,https 用于传输安全性,以确保中间人可以看到您传输的内容。
Oauth 2 授权服务器使用密钥或密码确定您的身份。 Oauth2 资源服务器使用来自授权服务器的令牌来确定您的身份。是否使用 https 取决于您是否要保护您的密钥和令牌。
【讨论】: