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

JE4*_*E42 6 websocket oauth-2.0

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

这个SO答案建议在URL中发送令牌,但是这种方法具有通过URL进行身份验证的所有缺点.这里讨论安全问题

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

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

小智 1

这对我有用,我使用了这个WebSocket 客户端库

您需要通过 Websocket 标头发送 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();
Run Code Online (Sandbox Code Playgroud)