在使用 webhook 在Ably Realtime中获取有关通道生命周期事件的通知时,将 access_token 作为 websocket url 查询参数的一部分发送是否安全?
(免责声明:我是 Ably 的开发者倡导者,并在 Stack Overflow 上发布并自行回答一个常见的支持问题,以便我们的用户可以更轻松地找到它)
在使用 webhook 在Ably Realtime中获取有关通道生命周期事件的通知时,将 access_token 作为 websocket url 查询参数的一部分发送是否安全?
(免责声明:我是 Ably 的开发者倡导者,并在 Stack Overflow 上发布并自行回答一个常见的支持问题,以便我们的用户可以更轻松地找到它)
从安全角度来看,访问令牌的存储位置并不重要。在一个普通的 HTTP 请求中,它会被存储在 header 中,或者在websocket连接建立后的消息中。但是,许多客户端的websocket不支持客户端标头,并且可以检查流量的攻击者同样可以访问这两者。如今,连接默认通过 TLS,因此您无法从外部访问查询参数,也无法访问消息的内容。
传统上,在查询参数中包含凭据被认为是不好的做法,因为 URL 可以存储在代理日志、浏览器历史记录等位置。但是,这些问题都不适用于websockets(浏览器不会保留连接的历史记录由页面创建),并且当存在 TLS 隧道时,代理无法访问 URL。当非 TLS 交互是默认设置时,就会出现这种担忧。相比之下,大多数 OAuth 流程会导致使用 access_token 查询参数进行端点访问。