gpt4 book ai didi

authentication - 如何验证客户端和服务器位于不同域的 websocket 连接?

转载 作者:行者123 更新时间:2023-12-03 17:36:25 27 4
gpt4 key购买 nike

我目前正在使用 SignalR 和 websockets。从我的研究来看,由于 websockets 不支持自定义 header ,因此在基于 token 的身份验证期间基本上只有两种方法来验证 websocket 连接。

1) 在查询字符串中传递 token
2) 将 token 存储在 cookie 中,然后当 WithCredentials 设置为 true 时,cookie 将传递给服务器

第一种方法不是很好的做法 - 即使通过 websocket 通信加密,查询字符串也可能由服务器等记录。

第二种方法我已经在我的本地机器上工作,但是一旦部署它就不起作用,因为我的客户端和服务器驻留在不同的域中。所以基本上,我有一个 Angular 站点,它有一个域(例如 client.com)和一个 WebAPI 站点,该站点所有 CORS 都具有完全不同的域(例如 server.com)。在我的浏览器上,如果我在 client.com 上,则无法设置根据请求发送到 server.com 的 cookie。

当客户端和服务器位于不同的域时,对 websocket 进行身份验证的好方法是什么?

最佳答案

WebSocket Protocol specification没有指定任何特定的身份验证方式。您需要在握手阶段执行身份验证,为此您可以使用任何 HTTP 身份验证机制,如 Basic、Digest 等。

您可以进一步查看 JWT token based authentication . Angular 应用程序可以将 token 存储在 local storage 中并在握手请求期间将其作为传输 header 发送到服务器。如果 token 无效,服务器可以终止 WebSocket 连接升级请求,Angular 应用程序可以将用户重定向到登录页面。

关于authentication - 如何验证客户端和服务器位于不同域的 websocket 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47495817/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com