【发布时间】:2017-03-22 17:45:08
【问题描述】:
在研究了各种 webhook 实现之后,我注意到了它们使用的安全机制的趋势。
Visual Studio Team Services webhooks 使用基本身份验证。
Microsoft Graph webhooks 在每个 webhook 调用的正文中发送一个明文“clientState”。接收方根据已知值验证 clientState。这类似于基本身份验证,因为每个请求都会通过网络发送明文凭据。
Slack 传出 webhook 使用与 Microsoft Graph 非常相似的技术:在每个请求的正文中发送一个纯文本“令牌”。接收方根据已知值验证令牌。同样,与基本身份验证非常相似:每个请求都会通过网络发送明文凭据。
在上述所有示例中,凭证永不过期。此外,每个钩子只有一个“令牌”值,这意味着如果令牌遭到破坏,就无法优雅地轮换令牌。
我对 Basic Auth 的理解是,它通常被避免,因为它要求客户端以明文形式存储凭据,这是一个安全风险。
继续前进,Github 和 Box webhook 使用共享密钥和签名进行身份验证。
用于 webhook 的安全机制与其各自 API 使用的安全机制形成对比——它们都使用 OAuth 2.0 和 JWT 不记名令牌。
我还没有看到使用基于令牌的身份验证的 webhook 实现 - 例如,在 Authorization 标头中发送 JWT 不记名令牌的平台。
我的问题是:Webhook 实现倾向于使用基本身份验证等不太安全的机制的原因是什么?他们为什么不直接使用 OAuth 2.0 和 JWT,就像他们自己的 API 一样?
【问题讨论】:
标签: security authentication webhooks