2009-03-24 4 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 지원 개발자 중 한 명입니다. 허용/거부 옵션은 웹 양식별로 다릅니다. 그들은 모든 공급자와 일할 수 있습니다.

  1. 맞춤형 인터페이스를 구현하려면 IPrincipal 인터페이스를 사용해야합니다.
  2. 허용/거부 역할의 역할은이 IsInRole IPrincipal 메서드에서 가져옵니다.
  3. global.asax 또는 자신의 IHttpHandler의 Request_Authentication에서 IPrincipal 개체를 만들고 Context.User 개체를 설정해야합니다. 이런 식으로 뭔가 : 역할이 당신의 elmah.axd 핸들러를 검사 할 때

    private void Request_Authenticate (object sender, EventArgs e) { 
        // do checks and create IPrincipal object 
        IPrincipal user = new MyPrincipal(...); 
        Context.User = user; 
    } 
    
  4. 는 그 다음이 사용자 지정 개체 대신 웹 양식에 갈 것입니다.