Websockets的OAuth2身份验证:通过子协议传递承载令牌?

时间:2016-03-31 03:44:22

标签: websocket oauth-2.0

我试图弄清楚将oauth bearer标记传递给websocket端点的最佳方法是什么。

This SO answer suggests to send the token in the URL, 但是这种方法具有通过URL进行身份验证的所有缺点。讨论了安全问题here

因此我想知道使用子协议将令牌传递给服务器会有什么缺点?即不是将所请求的子协议视为常量列表。发送至少一个遵循语法的子协议,例如:authorization-bearer-<token>

令牌最终会出现在请求标头中。 处理子协议时,服务器将能够使用一些自定义代码轻松查找和处理令牌。 由于传递子协议应该得到很多websocket实现的支持,这应该适用于很多客户端。

1 个答案:

答案 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();