2009-12-04 4 views
2

기본적으로 ASP.NET의 멤버 자격 공급자는 사용자가 보호 된 페이지에 액세스 할 수있는 권한이 없을 때 loginUrl로 리디렉션합니다.ASP.NET 멤버십을 사용하면 어떻게 403을 표시 할 수 있습니까?

사용자를 리디렉션하지 않고도 맞춤 403 오류 페이지를 표시 할 수있는 방법이 있습니까?

사용자를 로그인 페이지로 보내지 않고 주소 표시 줄에 ReturnUrl 쿼리 문자열이 없도록하고 싶습니다.

누구든지 MVC 관련 조언이있는 경우 MVC (및 Authorize 특성)를 사용하고 있습니다.

감사합니다.

+0

예! 나는 당신을위한 해결책이있다! –

답변

3

내 금지 된보기를 반환하는 사용자 지정 Authorize 클래스를 만들었습니다. 완벽하게 작동합니다.

public class ForbiddenAuthorizeAttribute : AuthorizeAttribute 
    { 
     public override void OnAuthorization(AuthorizationContext filterContext) 
     { 
      if (filterContext == null) 
      { 
       throw new ArgumentNullException("filterContext"); 
      } 

      if (AuthorizeCore(filterContext.HttpContext)) 
      { 
       // ** IMPORTANT ** 
       // Since we're performing authorization at the action level, the authorization code runs 
       // after the output caching module. In the worst case this could allow an authorized user 
       // to cause the page to be cached, then an unauthorized user would later be served the 
       // cached page. We work around this by telling proxies not to cache the sensitive page, 
       // then we hook our custom authorization code into the caching mechanism so that we have 
       // the final say on whether a page should be served from the cache. 

       HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache; 
       cachePolicy.SetProxyMaxAge(new TimeSpan(0)); 
       cachePolicy.AddValidationCallback(CacheValidateHandler, null /* data */); 
      } 
      else 
      { 
       // auth failed, display 403 page 
       filterContext.HttpContext.Response.StatusCode = 403; 
       ViewResult forbiddenView = new ViewResult(); 
       forbiddenView.ViewName = "Forbidden"; 
       filterContext.Result = forbiddenView; 
      } 
     } 

     private void CacheValidateHandler(HttpContext context, object data, ref HttpValidationStatus validationStatus) 
     { 
      validationStatus = OnCacheAuthorization(new HttpContextWrapper(context)); 
     } 
    } 
1

내가 인증되지 않은의 formsauth 처리의 버그를 고려 무엇 Asp.net는했다 2.0 이후 요청을 underauthenticated.

수년간 다른 사람들처럼 해킹 한 후에 나는 마침내 피곤하고 고쳐졌습니다. 상자에서 꺼내 사용할 수는 있지만 그렇지 않은 경우 사소한 수정자가 필요에 맞을 것이라고 확신합니다.

사용하기로 결정하면 성공 또는 실패를보고해야하며 기사를 업데이트 할 것입니다.

http://www.codeproject.com/Articles/39062/Salient-Web-Security-AccessControlModule.aspx

관련 문제