Dis*_*ive 5 authentication cookies websocket signalr asp.net-web-api
我目前正在使用 SignalR 和 websockets。从我的研究来看,由于 websockets 不支持自定义标头,因此在基于令牌的身份验证期间基本上只有两种方法来验证 websocket 连接。
1) 在查询字符串中传递令牌 2) 将令牌存储在 cookie 中,当 WithCredentials 设置为 true 时,cookie 将传递给服务器
第一种方法不是很好的做法 - 即使通过 websocket 通信加密,查询字符串也可能由服务器等记录。
第二种方法我已经在我的本地机器上工作,但是一旦部署它就不起作用,因为我的客户端和服务器驻留在不同的域中。所以基本上,我有一个 Angular 站点,它有一个域(例如 client.com)和一个 WebAPI 站点,该站点所有 CORS 都具有完全不同的域(例如 server.com)。在我的浏览器上,如果我在 client.com 上,我无法设置根据请求发送到 server.com 的 cookie。
当客户端和服务器位于不同的域时,对 websocket 进行身份验证的好方法是什么?
这协议规范没有指定任何特定的身份验证方式。您需要在握手阶段执行身份验证,为此您可以使用任何 HTTP 身份验证机制,例如 Basic、Digest 等。
此外,您可以研究基于 JWT 令牌的身份验证。Angular 应用程序可以将令牌存储在本地存储中,并在向服务器发出握手请求期间将其作为传输标头发送。如果令牌无效,服务器可以终止 WebSocket 连接升级请求,并且 Angular 应用程序可以将用户重定向到登录页面。
| 归档时间: |
|
| 查看次数: |
3821 次 |
| 最近记录: |