8

私たちのシステムに、ベアラトークンを標準の場所( 'Authorization'ヘッダー)に配置しないように要求する呼び出し側クライアントがあります。正しいJWTを探すカスタムハンドラを作成したい場所。 JwtBearerMiddleware実装をフォークするだけでなく、私はちょうどミドルウェアにどのハンドラを使用するかを伝えることができます。JwtBearerMiddlewareのカスタムトークンの場所

JWTミドルウェアが実行される直前に要求パイプラインの正しい場所(要求ヘッダー)にJWTを注入することによって、要求を書き直すだけで簡単な方法があります。しかし、これは少しハッキリのようです。

答えて

5

実際には、コードをフォークしたり独自のハンドラを用意したりせずに、これを行う組み込みの方法があります。イベント・ハンドラが実行された後Tokenプロパティがチェックされ、あなたがsourceを見てみる場合は

app.UseJwtBearerAuthentication(new JwtBearerOptions() 
{ 
    Events = new JwtBearerEvents() 
    { 
     OnMessageReceived = context => 
     { 
      // Get the token from some other location 
      // This can also await, if necessary 
      var token = context.Request.Headers["MyAuthHeader"]; 

      // Set the Token property on the context to pass the token back up to the middleware 
      context.Token = token; 

      return Task.FromResult(true); 
     } 
    } 
}); 

:あなたがしなければならないのは、OnMessageReceivedイベントにいくつかのコードをフックです。 nullの場合、ハンドラはAuthorizationヘッダーのデフォルトチェックで続行されます。

+1

ありがとうございました。私はソースをスキャンしましたが、あなたがリンクしたコード行を2つと2つにわけていませんでした。魅力のように動作します。 私はSignalR(私たちはクッキーを使用したくない)を使用しており、代わりにクエリー文字列からトークンを取得したいので、関心のある人はクエリー文字列にBearerトークンを追加する必要があります。 – Lutando

+0

@Lutando喜んで助けてください! –