少し前に、mvc 5がリリースされました。重要な変更の1つは承認システムです。 「空の」mvc 5プロジェクトを作成する場合、Facebook、Google、Twitter、Microsoftアカウントの認証を接続できます。 私はすぐにそれがすべてどのように機能するかを理解するようになり、結果はVkontakteネットワーク用の「ミドルウェア」モジュールになりました。 「Duke.Owin.VkontakteMiddleware」を検索してnugetパッケージ経由で配信でき、ソースを参照してください:
github.com/DukeNuken/Duke.Owin.VkontakteMiddlewareインターネット上には 、
owinの承認と刀プロジェクトに関する多くの記事があり、それらを使用して
ソースをダウンロードすることもでき
ます 。
そして今、私はこれがどのように機能するかを一般的な用語で議論することを提案します。 少し歴史。 昔々、約6年前、顧客の1人がサイトに「/アカウント/登録」などの美しいリンクを作成するように頼みました。プロジェクトはasp.netにあったので、唯一の解決策はIISのUrlRewritingモジュールをインストールし、すべてがサイトで正常に機能することでしたが、スタジオでは、このようなリンクは明らかに開かれず、不便を招きました。 Microsoftがmvcをリリースしてから、プロジェクト側(RouteConfig)でUrlRewritingロジックが実装され、プロジェクト側でもスクリプト最適化(BundleConfig)が行われました。 これにより、プロジェクトはサーバー上のすべての依存関係を正しく動作させることができます。 同じ原則により、承認がmvc 5に追加されました。
Startupクラスは/ App_Startプロジェクトにあり、ConfigureAuth関数(IAppBuilderアプリ)は1つしかありません。 プロジェクトの開始時に動き、いわゆるミドルウェアモジュールをロードします。 それは何であり、どのように機能しますか? 本質的に、これらはAuthenticationMiddlewareを継承するクラスです。 このクラスには、コンストラクターとCreateHandler()メソッドがあります。 このメソッドはページにアクセスするたびに呼び出され、2つのメソッドを持つAuthenticationHandlerを作成するだけです。 それらをより詳細に検討しましょう。
1)
保護オーバーライドタスクApplyResponseChallengeAsync() -このメソッドは、コントロール内のロジックを処理した
後 、ユーザーに応答を送信する前に呼び出さ
れます。 彼は3つの重要なステップを踏みます。 応答のhttpコードを確認します-401(自動化されていない)である場合、特別なヘルパーはこのモジュールが承認を行うかどうかを確認し、承認する場合、承認サイトへのリダイレクトが行われ、その結果、ユーザーはこのフォームを表示します:

つまり、最初の方法は、ユーザーがログインページの[Vknotakte]ボタンをクリックした後にのみ実際に実行されます。
ここにサンプルページを見ることができます。他のすべての場合は、制御をさらに転送します。
確認後、ユーザーはサイトに戻り、モジュールの戻りページに戻ります。 ほぼそのような '/ signin-vkontakte?Code = 8e40fbe05c7ec232c0'(この戻りページはモジュールパラメーターで設定されます)およびこの時点で2番目の方法が機能します
2)
public override async Task <bool> InvokeAsync() -このメソッドは、コントロールを実行し、その「ベース」リンクをリクエストと比較する
前に各ページを切り替えます。 それらが一致する場合、認証自体が発生します。 VKontakteのモジュールを例として使用すると、このメソッドは基本的に最初のメソッドからの '/ signin-vkontakte'リンクを待機します。
InvokeAsyncメソッドの内部では、ページ「
oauth.vk.com/access_token 」が
ぴくぴくとトークンを受け取り、その後Vkontakte APIが呼び出され、ユーザー情報(名前とID)が受け取られます。 このデータに基づいて、
AuthenticationTicketが作成されます。 次に、AuthenticationTicketを使用してReturnEndpointContextオブジェクトを作成し、Microsoft.Owin.Security.AuthenticationManagerを介して情報を保存します。 その後、ユーザーは/ Account / ExternalLoginCallbackに転送され、サイトで登録する名前を示すことで
登録を
完了することができます。
いくつか注意点があります。
1)「ミドルウェア」モジュールの動作は、リクエストの最初と最後に制御を受け取る通常のhttpモジュールに非常に似ています。

2)登録には2種類あります-サイトへの登録とowinモジュールによる登録がありますが、最終的にVkontakteでの承認後、ユーザーはページページ「/ Account / ExternalLoginCallback」に戻ります(ページに承認に連絡したというメッセージがあります)正常に、名前と[登録]ボタンを指定するためのテキストフィールド)、[登録]をクリックすると通常のアカウントが作成され、「Vkontakte」プロバイダーに属していることが示され、ユーザーIDがそこでパラメーターとして使用されます。 データベースでは、次のようになります

つまり、サイト自体のowin認証は何も行いませんが、通常の登録に関する情報のみを提供します。
ご清聴ありがとうございました。
ここでのライブ例
freemusiclib.com/Account/Login