2017-12-17 9 views
0

正しい方法が.NET Core 2.0 WebAPIプロジェクトで認証を拡張する方法を理解しようとしています。.NET Core 2.0で認証ミドルウェアを適切に拡張する方法

私はEntity FrameworkストアでIDを使用しています。 AddAuthentication()UseAuthentication()を使用して認証をサポートするようにサービスを設定しました。

私はAddJwtBearer()で認証にJWTトークンを使用しています。

  1. 検証のユーザー名とパスワードをし、Entity FrameworkのIDストアでの一致があるかどうJWTトークンを発行します。今、私は私のために二つのことを処理するためのAPIを追加します。この部分はかなり簡単で、コントローラAccountSignInManagerを注入するだけで実現できます。

  2. ユーザーが見つからない場合は、カスタム認証フローを使用して、ユーザーが別の「場所」に存在するかどうかを検証し、一致するものがあるかどうかを検証します。さて、これが私が最良のアプローチを見つけようとしているところです。

頭に浮かぶ唯一のことは、一致が見つかった場合、私のカスタムストアを使用して検証した後、EF IDストアを経由してユーザ名/パスワードを検証、私のAccountコントローラにこのログインフローを構築することです - 呼び出しAccountコントローラから手動で「新しいユーザー」メソッドを使用します。しかし、このアプローチは.NET 1.1では独自の認証ミドルウェアを構築することで対処されたため、私には気になりません。しかし、私は.NET 2.0のアプローチのためのドキュメントを見つけることができません。

問題を解決する最善の方法は何ですか?

+0

なぜそれについてミドルウェアを作っていますか?それは1.1で最も良いアプローチだとは思わない。技術的なものではなく、AccountControllerに入れてもいいと思います。 –

答えて

0

これはもっとスタイル/デザインの問題のようです。

A)あなたが本当にあなただけの(場合には、ユーザーの資格情報のための「外部」の一致を見つけることの一部であることを「登録」を追加することができます「ログイン」)の間に、AccountControllerにすべてを置くことができます、あなたが提案したように。

私はちょうどそれをすることに大きな欠点はありません(私はしばしば、スタートアップ時により多くの設定を行うことができるため、ミドルウェアを自分好みにしています)。

賢明には、外部プロバイダを内部IDストアと同期させることが問題になる可能性があります(通常そうですが)。これはどちらのオプションにも当てはまります。専門の認可サーバーを導入することでそれを解決することはよくありますが、私は十分な詳細は知らないので推測しています。

B)私が認証を追加するために、あなたが欲しいものを書く
を読んでいる場合。基本的には(そのコードの一部を要約する)
TokenProviderMiddleware
(つまりGitHub solutionは非常に良い例です)

:ミドルウェア私は(それに基づいて)このようなものを使用
あなたはからapp.UseTokenProvider();のようなものを呼び出します構成(起動)。

app.UseTokenProvider(_tokenProviderOptions); 
// or directly (w/o the extension method) 
app.UseMiddleware<TokenProviderMiddleware>(); 
... 

...そしてTokenProviderMiddleware

.ctorにチェーン内の次の注入(満たすために、特定の署名を持っており、public Task Invoke(HttpContext context)

これは同じくらいあなたがそれを行うには好きなあなたは、コントローラをスキップすることを可能にする、または。

これがあなたの問題を解決するかどうかは分かりませんが、それは私に何か似たような助けとなりました。

+0

はい、これは私が考えていたものです。 .NET CoreのActive Directory認証プロバイダ(純粋なLDAP上でIISなしで動作するようにするため)。しかし、アプリケーションの役割とそれ以外のユーザー情報を管理するために、LDAPからデータを認証/取得した後もIdentityエンティティを作成し、 ADに関連する。これはよりクリーンなソリューションのように見えます。 –

関連する問題