7

ASP.NET MVC でカスタム認証を実装しました。有効なユーザーがログインしようとするHttpContext.User = userと、AccountController の Logon メソッドに を設定します。しかし、それはその要求のためだけに残ります。セッションに設定するにはどうすればよいですか?

代わりに set を使用しましたHttpContext.Session["CurrentUser"] = user。セッションが承認されているかどうかを確認したい場合は、HttpContext.User != null. しかし、アプリケーションのどこにでも認証ロジックを公開したくありません。それを変更する必要がある場合、それは面倒です。

これを解決するのを手伝ってください。1 つの解決策は、最初HttpContext.Userにすべてのリクエストのプロパティに の値を入力することですがHttpContext.Session["CurrentUser"]、その方法がわかりません。

4

2 に答える 2

11

Global.asax の Application クラスに次のメソッドを記述します。

protected void Application_BeginRequest(Object sender, EventArgs e)
{
   HttpContext.Current.User = HttpContext.Session["CurrentUser"];
}

または、コントローラーに継承された System.Web.Mvc.Controller の "User" プロパティを使用できます (注: ユーザー ログインが正常に検証されたら、必ず FormsAuthentication.SetAuthCookie メソッドを呼び出してください)。

于 2010-01-24T05:23:20.943 に答える
6

これを行う最善の方法は、カスタム認証モジュールを作成し、それをアプリケーションにフックすることです。このモジュールはリクエストの前に実行され、必要に応じて HttpContext.User プロパティを設定する機会があります。

たとえば、フォーム認証モジュールについて考えてみましょう。HTTP ハンドラー (.aspx ページ、MVC パイプラインなど) が実行される前に、要求をインターセプトする機会があります。ログイン Cookie の値を読み取り、暗号化された Cookie の値を復号化して検証し、チェックに合格した場合は HttpContext.User を設定します。こうすることで、ハンドラーが実行されて実際に要求が処理されるときに、User プロパティは既に正しく設定されています。

最終的には、ASP.NET ではカスタム認証属性は必要ありません。これは、既にインボックスで提供されている [Authorize] 属性がカスタム認証モジュールで自動的に機能するためです。ただし、 AccountController.LogOn() メソッド (またはこれの代わりに使用するもの) は、認証モジュールによって検証されるトークンを生成する適切な認証プロバイダーと通信する必要があります。これは、インボックスで提供されるものとは異なるコードを記述する必要がある唯一の場所です。

http://social.msdn.microsoft.com/Search/en-US?query=http%20modulesおよびhttp://social.msdn.microsoft.com/Search/en-US?query=custom%20authentication%20aspを参照してください。詳細については、 .netを参照してください。

于 2010-01-24T05:23:14.563 に答える