2012-07-30 7 views
2

이미지 액세스 제한에 AuthorizeImage 이벤트 핸들러가 추가되었습니다. 사용자 이름과 인증 상태를 확인하려고 할 때 다음과 같은 사실을 알았습니다.Image Resizer User.Identity in eventhandler

아래의 내용은 예외는 아니지만 깨뜨릴 수 있습니다. 이미지를 찾을 수없는 기본 아이콘은 인증 여부와 관계없이 표시됩니다. 테스트 됨. 사용자 = 동일한 결과. HttpContext.Current.User = 같은 결과

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e) 
{ 
    if (context.User.Identity.IsAuthenticated) { context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); }  
}; 

잘 (this.User 및 HttpCOntext.Current.User뿐만 아니라) 아래 작품은

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e) 
{ 
    context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); 
}; 

이 항상

Config.Current.Pipeline.AuthorizeImage += delegate(IHttpModule sender, HttpContext context, IUrlAuthorizationEventArgs e) 
{ 
    if (context.User == null) 
     context.Response.Redirect("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif"); 
}; 

리디렉션 Application_Start에서 테스트를 시작했지만 실제로 Application_PostAuthenticateRequest를 시도했습니다. 결과는 동일하지만. 사용자 지정 코드를 통해 인증하지만 표준 형식 인증을 사용하여 쿠키를 설정합니다. [Authorize]는 응용 프로그램에서 잘 작동합니다. 여기서 무엇이 잘못되었을 수 있는지에 대한 제안은 무엇입니까?

+0

, 당신이 얻고있는 경우는 '을 (를) 찾을 수 없습니다 바랍니다 '아이콘을 클릭하고 URL을 직접 열고 실제 오류 메시지를 가져옵니다. –

+0

죄송합니다. 난 nullreference 예외, "개체 참조가 개체의 인스턴스로 설정되지 않습니다." if (context.User.Identity.IsAuthenticated) {context.Response.Redirect ("http://db2.stb00.s-msn.com/i/AF/263B63C5E656379CEE93E7A8692EC7.gif");} "가 포함 된 행을 표시합니다. 그래서 context.User는 인스턴스화되지 않습니다. 문제는 그 이유입니다. 인증은 다른 측면에서 작동하므로 (보기에서 @ User.Identity.Name은 사용자 이름을 제공함) 이벤트 핸들러와 관련이있는 것으로 의심 되나요? – Baserz

+0

ASP.NET은 익명 사용자를 위해 context.User를 채우지 않습니다. 익명 사용자가 아닌 경우 PostAuthorize 이전에 사용자 코드가로드되고 있지 않으므로 버그입니다. –

답변

4

서버는 .aspx, .ashx 등과 같은 특정 요청 확장명에 대해서만 FormsAuthenticationModule을 실행하도록 구성됩니다.이 문제를 해결하는 방법은 두 가지입니다.

  1. 제거 및 전제 조건 = "managedHandler"속성 떨어지고, (통합 모드의 경우) <system.webServer> <modules>에 FormsAuthenticationModule 모듈을 재-추가 :
  2. 사용 RAMMFAR (runAllManagedModulesForAllRequests)

이 게시물에 대한 자세한 내용을 포함을 # 1과 # 2를 구현 :

How do I protect static files with ASP.NET form authentication on IIS 7.5?

+0

해결 방법 1이 문제를 해결 한 것 같습니다. 도움을 주셔서 감사합니다. – Baserz

+0

가능하면 해결 방법 1이 필요합니다. RAMMFAR에 대한 자세한 내용은 [SCOTT HANSELMAN의 블로그 게시물] (http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAllRunAllManagedModulesForAllRequests.aspx)을 참조하십시오. –