2016-12-16 5 views
13

私は、ASP .NETコアWeb APIアプリケーションでJWT認証トークンを使用しています。トークンはAPI自体によって生成され、第三者によって生成されることはありません。 SignalRをスタックに正常に追加しましたが、サーバー(ハブ)メソッドを実行しようとしているユーザーを認証する必要があります。 誰かがJavaScriptの "qs"プロパティでトークンを渡すことを提案しました。これは私のために働いていません私たちのトークンは本当に大きいです(彼らは多くの主張を含んでいます)。 ペイロードからトークンを読み取り、ユーザーを自動認証するカスタムミドルウェアを作成しようとしました。問題は、WebSocketを使用する場合、ミドルウェアが実行されないことです。 アイデアが役立ちます。Query Stringでトークンを渡さずに、SignalR(.NET Core)でJWT認証を行います。

+0

[SignalRとOpenId Connect]の複製があります(http://stackoverflow.com/questions/40806171/signalr-and-openid-connect) –

+2

ここではクエリ文字列を使用できないため、これは重複していませんすべて、私のトークンが長すぎて414エラーが発生します。私は、SignalRメッセージからトークンを抽出してユーザーをログオンするカスタムミドルウェアのようなものを構築したいと考えています。 –

+0

残念ながら、トークンを渡す方法は2つしかありません---クエリ文字列またはパラメータのどちらかです。うまくいけば、これは次のバージョンのSignalRで対処されることを願っています。 – mikebridge

答えて

5

クエリ文字列Authenticate against a ASP.NET Core 1.0 (vNext) SignalR application using JWTを使用することを提案する記事をご覧ください。トークンが長すぎることはわかっていますが、作者はミドルウェアを使用してリクエストを認証する方法を説明しています。ここで

は記事からの要約です:

  • SignalRは、それが標準のASP.NET認証を使用している、に建てられた特別な認証メカニズムを持っていません。
  • JWTは、一般的に、要求のAuthorizationヘッダーに送られ
  • リクエストのヘッダーを送信するための手段が含まれていませんSignalRのJavaScriptクライアントライブラリ、それはしかし、あなたは私たちが合格した場合
  • クエリ文字列を渡すことができませんクエリ文字列内のトークンは、トークンをその値として持つ承認ヘッダーを追加するミドルウェアを書くことができます。 これは
  • は、私はあなたのカスタムミドルウェアはJWTミドルウェア前に登録しなければならない重要な点を強調している「ベアラー」形式

の点に注意してパイプラインでJWTミドルウェアの前に行わなければなりません。

+0

ミドルウェアはありますが、qsが長すぎます –

+0

qsが長いことを理解しています。トークンをペイロードに埋め込み、ミドルウェアを使用してそれを以前に登録することはできますか? –

+0

申し訳ありませんが、SignalRの前にミドルウェアのペイロードにアクセスできない可能性があります。その場合、ペイロードを読み取るときに、アプリケーションコードにトークン用のカスタムパーサを実装できます。 Authorize属性を使用することはできませんが、ユーザーのクレームとそのすべてをチェックすることができます。 –

関連する問題