将 access_token 作为 websocket url 查询参数的一部分发送是否安全?
Is it secure to send the access_token as part of the websocket url query params?
在 Ably Realtime 中使用 webhook 获取有关通道生命周期事件的通知时,将 access_token 作为 websocket url 查询参数的一部分发送是否安全?
(免责声明:我是 Ably 的开发者倡导者,并在 Stack Overflow 上发布和自我回答 commonly asked support question 以便我们的用户可以更轻松地找到它)
从安全角度来看,访问令牌存储在何处并不重要。在一个普通的 HTTP 请求中,它将存储在 header 中,或者在 websocket connection is established. However, many websockets 之后的消息中,因为客户端不支持客户端 headers,并且这两者同样可以访问可以检查流量的攻击者。这些天连接默认通过 TLS,因此您无法从外部访问查询参数,也无法访问消息的内容。
传统上,在查询参数中拥有凭据被认为是不好的做法,因为 URLs 可以存储在代理日志、浏览器历史记录等地方。但是,这些问题都不适用于 websockets(浏览器不会保留页面连接的历史记录),并且当存在 TLS 隧道时,代理无法访问 URL。当 non-TLS 交互是默认设置时,就会出现这种担忧。为了进行比较,大多数 OAuth 流程都会导致使用 access_token 查询参数进行端点访问。
在 Ably Realtime 中使用 webhook 获取有关通道生命周期事件的通知时,将 access_token 作为 websocket url 查询参数的一部分发送是否安全?
(免责声明:我是 Ably 的开发者倡导者,并在 Stack Overflow 上发布和自我回答 commonly asked support question 以便我们的用户可以更轻松地找到它)
从安全角度来看,访问令牌存储在何处并不重要。在一个普通的 HTTP 请求中,它将存储在 header 中,或者在 websocket connection is established. However, many websockets 之后的消息中,因为客户端不支持客户端 headers,并且这两者同样可以访问可以检查流量的攻击者。这些天连接默认通过 TLS,因此您无法从外部访问查询参数,也无法访问消息的内容。
传统上,在查询参数中拥有凭据被认为是不好的做法,因为 URLs 可以存储在代理日志、浏览器历史记录等地方。但是,这些问题都不适用于 websockets(浏览器不会保留页面连接的历史记录),并且当存在 TLS 隧道时,代理无法访问 URL。当 non-TLS 交互是默认设置时,就会出现这种担忧。为了进行比较,大多数 OAuth 流程都会导致使用 access_token 查询参数进行端点访问。