2009-03-24 2 views
3

セッションオブジェクトを介してユーザーを確認するためにマスターページのINITイベントに依存する非常に基本的なasp.netアプリケーションがあります。はい、私はこれが最善の方法であることを知っています。フォーム認証を使用しないasp.netアプリケーションのELMAHをセキュアにします

私はELMAHを追加したいと思いますが、フォーム認証とweb.configの許可/拒否設定を使わずにコンソールのセキュリティ保護に関する参照を見つけることはできません。

フォーム認証に依存しないelmah.axdファイルを保護する別の方法はありますか?

答えて

3

この記事では、セッション状態へのアクセスを可能にする別のイベントハンドラでELMAHのエラーハンドラをラップする方法について説明します:Global.asaxの中

http://groups.google.com/group/elmah/msg/a0aa776d348ba97e

、あなたが何かを持っている可能性がありなどは、以下:

protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) 
{ 
    // Get the filename being requested 
    string filename = Path.GetFileName(Request.Path).ToLower(); 

    // Verify that a user is logged in by checking the session 
    bool isValid = (HttpContext.Current.Session["User"] != null); 

    // Throw error if invalid 
    if (filename == "elmah.axd" && !isValid) 
     throw new SecurityException("Access to elmah.axd is denied"); 
} 

標準ELMAHハンドラがIRequiresSessionStateまたはIReadOnlySessionStateを実装していないので、あなたは別のものを作成する必要があります上記のリンクで説明されているように、これをラップするイベントハンドラです。そうしないと、Application_PreRequestHandlerExecuteイベントでセッションにアクセスできなくなります。

1

私はELMAHのMySQLサポートの開発者の一人です。許可/拒否オプションはWebフォーム固有ではありません。彼らはどんなプロバイダーでも働くことができます。

  1. カスタムを導入するには、IPrincipalインターフェイスを使用する必要があります。
  2. 許可/拒否ロールからのロールは、このIsInRole IPrincipalのメソッドから取得されます。
  3. global.asaxまたは自分のIHttpHandlerのRequest_Authenticationで、IPrincipalオブジェクトを作成してContext.Userオブジェクトに設定する必要があります。このような何か:

    private void Request_Authenticate (object sender, EventArgs e) { 
        // do checks and create IPrincipal object 
        IPrincipal user = new MyPrincipal(...); 
        Context.User = user; 
    } 
    
  4. 役割は、あなたのelmah.axdハンドラがチェックされている場合、それは代わりにWebフォームのこのカスタムオブジェクト反します。

関連する問題