我试图弄清楚将oauth bearer标记传递给websocket端点的最佳方法是什么。
This SO answer suggests to send the token in the URL, 但是这种方法具有通过URL进行身份验证的所有缺点。讨论了安全问题here
因此我想知道使用子协议将令牌传递给服务器会有什么缺点?即不是将所请求的子协议视为常量列表。发送至少一个遵循语法的子协议,例如:authorization-bearer-<token>
令牌最终会出现在请求标头中。 处理子协议时,服务器将能够使用一些自定义代码轻松查找和处理令牌。 由于传递子协议应该得到很多websocket实现的支持,这应该适用于很多客户端。
答案 0 :(得分:1)
这对我有用,我使用了WebSocket client library。
你需要通过Websocket Header发送OAUTH令牌,下面是代码,希望这是有帮助的。
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();