2017-11-26 22 views
1

私は現在、SignalRとウェブソケットで遊んでいます。私の研究では、WebSocketはカスタムヘッダーをサポートしていないため、基本的にトークンベース認証中にWebSocket接続を認証する方法は2つしかないようです。 WithCredentialsが真クライアントとサーバーが別々のドメインにあるwebsocket接続を認証するにはどうすればよいですか?

第一の方法に設定されているときに、サーバーに渡されるCookieにトークンを保存するクエリ文字列 2)でトークンを渡す

1)がない偉大な練習です - さえ通過

2番目の方法はローカルマシンで作業していますが、クライアントとサーバーが異なるドメインに存在するため、一度展開すると動作しません。ですから、基本的には、ドメインが1つのAngularサイト(例:client.com)と全く異なるドメイン(たとえばserver.com)を持つCORSのWebAPIサイトがあります。私のブラウザでは、私がclient.comにいると、要求に応じてserver.comに送られるクッキーを設定できません。

クライアントとサーバーが異なるドメインにあるときにWebソケットを認証する良い方法は何ですか?

答えて

1

WebSocket Protocol specificationは、認証に特定の方法を指定していません。ハンドシェイクフェーズで認証を実行する必要があります。そのためには、Basic、DigestなどのHTTP認証メカニズムを使用できます。

さらにJWT token based authenticationを参照できます。角型アプリはトークンをlocal storageに格納し、ハンドシェイク要求中にトランスポートヘッダーとしてサーバーに送信できます。トークンが無効な場合、サーバーはWebSocket接続のアップグレード要求を終了し、Angularアプリケーションはユーザーをログインページにリダイレクトできます。

+0

これは私が言っていることです。私はJWTトークンベースの認証を使用しており、WebSocketはカスタムヘッダーをサポートしていないため、ヘッダーとして送信できません。サーバーが別のドメインに存在するため、Cookieを使用できません。 – Diskdrive

+0

使用しているWebSocketサーバーの実装は何ですか? –

+0

SignalR - これは問題ではありません。カスタムヘッダをサポートしていないブラウザAPIに問題があります – Diskdrive

関連する問題