2016-03-31 13 views
5

oauthベアラトークンをwebsocketエンドポイントに渡すのが最善の方法であるかを解明しようとしています。WebAccessのOAuth2認証:サブプロトコルを使用してベアラトークンを渡しますか?

This SO answer suggests to send the token in the URL ただし、この方法ではURLによる認証のすべての欠点があります。セキュリティの意義here

このように、サブプロトコルを使用してサーバーにトークンを渡す際の欠点は何ですか?すなわち要求されたサブプロトコルを定数のリストとして扱う代わりに使用することができる。たとえば、次のような構文に従う少なくとも1つのサブプロトコルを送信します。authorization-bearer-<token>

トークンは要求ヘッダーになります。 サブプロトコルを処理しているサーバーは、カスタムコードで簡単にトークンを見つけて扱うことができます。 サブプロトコルの受け渡しは、多くのWebソケット実装でサポートされるはずなので、これは多くのクライアントで有効です。

+0

これは非常に興味深い考えです。誰かがそれに深く関わっているとコメントできますか? – Javali

+0

https://github.com/tmc/grpc-websocket-proxyの構文は少し異なります: 'Sec-Websocket-Protocol:Bearer、foobar'は' Authorization:Bearer foobar'を意味します。 – JE42

答えて

0

これは私のために働いた、私はこれを使用WebSocket client library

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(); 
関連する問題