【问题标题】:Google IAP Authentication for WebSocketsWebSocket 的 Google IAP 身份验证
【发布时间】:2021-10-04 02:27:57
【问题描述】:
我们在 Google Compute VM 前面有一个 Google http(S) LB,我们正在将一个子域路由到后端,该后端只公开一个 wss 端点。我找不到任何关于如何使用 Google IAP 和 OIDC 令牌进行身份验证的 javascript 代码示例。
Google IAP 是否支持身份验证的查询参数?
我找到了这个条目:
Bearer authentication for websocket
感谢您的建议
【问题讨论】:
标签:
javascript
google-cloud-platform
google-oauth
google-iap
【解决方案1】:
在 JavaScript WebSockets API 中没有方法可以从 JavaScript 自定义 WebSocket 标头,您仅限于从浏览器发送的“隐式”身份验证(即基本或 cookie)。此外,处理 WebSocket 的服务器与处理“正常”HTTP 请求的服务器完全分开是很常见的。这会使共享授权标头变得困难或不可能。实现这一目标的一种方法是使用基于“票证”的身份验证系统。
-
当客户端代码决定打开一个 WebSocket 时,它会联系
HTTP 服务器获取授权“票”。
-
服务器生成票证。它通常包含某种
用户/帐户 ID,请求票证的客户端的 IP,a
时间戳,以及您可能保存的任何其他类型的内部记录
需要。
-
服务器存储此票证(即在数据库或缓存中),并且
将其返回给客户端。
-
客户端打开 WebSocket 连接,并沿此发送
“票”作为初始握手的一部分。
-
然后服务器可以比较这张票,检查源 IP,验证
票证未被重复使用且未过期,并执行任何操作
其他类型的权限检查。如果一切顺利,WebSocket
连接现已验证。
请参阅websocket security 和相关堆栈帖子HTTP headers in websockets client API 和Websocket authentication 的链接。