2011-06-24 18 views
1

ASP.NETのカスタムデータベースに対する認証を設定する最も良い方法は何ですか?私の現在のセットアップは素晴らしいとは言えません。認証を行う良い方法があると確信していますが、私が見つけることができるのは7〜8歳の記事です。現在の設定は次のとおりです。asp.netのカスタム認証

  • アプリケーションは、ユーザーが許可されたユーザーのデータベースに存在するかどうかを調べるために、Windowsユーザー名(Windows認証)を使用します。これは、Page_LoadでAuthenticateメソッドを呼び出すことによって行われます。
  • ユーザーが許可されたユーザーでない場合、ページはログイン画面にリダイレクトされます。

この方法の欠点は、それが呼び出すことです:Page_Loadメソッドの本体全体を実行

Response.Redirect("~/login.aspx", false) 

。認証を行う良い方法はありますか?カスタムページクラスやHTTPModuleのようなものがありますか?

答えて

1

あなたはOnInitのように、以前のリクエストでご確認を行うことができ、または独自のメンバシッププロバイダを実装するように、少しより堅牢な何かができる:MSDN article/Video tutorial

+0

これは、すべてのページが継承できる基本クラスに組み込まれる可能性があります。 – ScottD

+0

ええ、ベースページクラスを使用することは、この種の機能のための素晴らしいアイデアです。 – wsanville

+0

優秀、それはまさに私がやることです。今私はそれについて考えるように明らかに見えます。 – ScottD

0

わかりましたので、これは基本的にどのように私ですそれをやった。私はSystem.Web.UI.Pageから継承するこのクラスを書いた。私はOnInitイベントを上書きします。これは認証が行われる場所です(ユーザーのデータベースに対してWindowsユーザー名を検索します)。ユーザーが認証されない場合、isTerminatingはtrueに設定され、OnLoadイベントはisTerminatingfalseの場合にのみ実行されます。私は自分自身で2番目のパラメータをfalseに設定してResponse.Redirectを残そうとしましたが、それでもそれ以降のすべてのページイベントが実行されました。

public class BasePageClass : Page 
{ 
    private bool isTerminating = false; 

    protected override void OnInit(EventArgs e) 
    { 
     isTerminating = !AuthenticationManager.Authenticate(); 

     base.OnInit(e); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     if (!isTerminating) 
     { 
      base.OnLoad(e); 
     } 
    } 
} 

(でもHttpApplication.CompleteRequest()を呼び出して)私は考えがOnLoadイベントを実行していないかどうかを行うための最善のものではありません持っている、それが正常に動作するために、「そうです」。