2009-06-15 3 views
3

IAuthorizationFilter가 속성과 결합되어 컨트롤러가 코스를 실행하기 전에 사용자가 로그인했는지 확인하는 것이 더 좋습니까?ASP.Net MVC : IAuthorizationFilter/속성이 로그인에 대한 보안 검사를 선호합니까?

저는 MVC를 처음 접했기 때문에 WebForms에서 처리 된 상황을 처리하는 방법을 알아 내려고 노력했습니다. 어제 도망친 것은 사용자가 로그인했는지 여부에 따라 페이지를 볼 수 있는지 여부를 확인하는 것입니다. 내 프로젝트를 가져 와서 MVC 프로젝트로 "변환"할 때, 나는이 상황을 어떻게 해결할 것인가에 대해 다소 의구심이있었습니다.

[AttributeUsage(AttributeTargets.Method)] 
public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext context) 
    { 
     if (State.CurrentUser == null) 
     { 
      context.Result = 
       new RedirectToRouteResult 
       (
       "Login", 
       new RouteValueDictionary 
       (
        new 
        { 
        controller = "Login", 
        action = "Error", 
        redirect = SiteMethods.GetCurrentUrl() 
        } 
       ) 
      ); 
     } 
    } 
} 

그럼 난 그냥 그 속성을 때리고 :

if (State.CurrentUser == null) 
{ 
    State.ReturnPage = SiteMethods.GetCurrentUrl(); 
    Response.Redirect(DEFAULT_LOGIN_REDIRECT); 
} 

는 내가 발견 했는가하는 것은 이것이다 : 사용자가 로그인 된 경우 웹폼 버전으로

, 내가 확인하기 위해 기본 페이지를 사용 어떤 컨트롤러 방법과 삶에 좋다. 문제는이 작업을 수행하는 것이 가장 바람직한 방법일까요?

답변

2

바퀴를 재발 명하지 마십시오. MVC 프레임 워크에는 이미 캐시와 같이 여기에 붙여 넣은 코드에없는 미묘한 부분을 처리하는 AuthorizeAttribute가 포함되어 있습니다. 그냥 사용해라. 그러나 그렇습니다, 속성은 갈 길입니다.

+0

하지만 Authorize 속성은 어떤 역할을합니까? 역할 구성원 요구 사항 또는 사용자 지정 권한 부여 HTTP 헤더는 어떻습니까? –

1

FilterAttributes를 사용하여 보안 컨트롤러 작업을 수행하는 것이 좋습니다.

+0

다음은 컨트롤러 작업 보안에 대한 유용한 블로그 게시물입니다. http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/ – Ropstah

+1

나는이 기사가 MVC 1 –

관련 문제