我试图弄清楚将 oauth 持有者 token 传递给 websocket 端点的最佳方法是什么。
This SO answer suggests to send the token in the URL ,
但是,这种方法具有通过 URL 进行身份验证的所有缺点。讨论了安全隐患here
因此我想知道使用子协议(protocol)将 token 传递给服务器会有什么缺点?即,而不是将请求的子协议(protocol)视为常量列表。发送至少一个遵循以下语法的子协议(protocol),例如:authorization-bearer-<token>
token 最终会出现在请求 header 中。
服务器在处理子协议(protocol)时将能够通过一些自定义代码轻松找到并处理 token 。
由于许多 websocket 实现应该支持传递子协议(protocol),这应该适用于很多客户端。
最佳答案
这对我有用,我用过这个 WebSocket client library .
您需要通过 Websocket Header 发送 OAUTH token ,下面是代码,希望对您有所帮助。
ws = factory.createSocket("wss://yourcompleteendpointURL/");
ws.addHeader("Authorization", "Bearer <yourOAUTHtoken>");
ws.addHeader("Upgrade", "websocket");
ws.addHeader("Connection", "Upgrade");
ws.addHeader("Host", "<YourhostURLasabovegiveupto.com>");
ws.addHeader("Sec-WebSocket-Key", "<Somerandomkey>");
ws.addHeader("Sec-WebSocket-Version", "13");
ws.connect();
关于websocket - Websocket 的 OAuth2 身份验证 : Pass Bearer Token via Subprotocols?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36323743/