2013-04-23 3 views
2

에서 비보안 연결을 사용하는 액션은 하나만 허용됩니다. 웹 응용 프로그램에서 HTTP 비보안 연결을 사용하여 액세스 할 수있는 작업을 만들어야합니다. 다른 모든 사이트는 https에만 액세스 할 수 있어야합니다. 컨트롤러 및 동작에 [RequireHttps] 속성을 사용할 수 있음을 발견했습니다.ASP.NET mvc 4, C#

하지만 [AllowHttp] 속성이 있습니까?

컨트롤러의 모든 동작에 [RequireHttps] 속성을 사용하고 싶지 않습니다. 컨트롤러에 [RequireHttps]을 넣는 것이 더 쉽고 보안되지 않은 것으로 액세스 할 수있는 작업 하나에 [AllowHttp]을 넣는 것이 더 쉽습니다. 물론이 속성을 사용할 수있는 경우

나는 인증과 관련이 있습니다. 컨트롤러에 [Authorize] 및 인증없이 액세스 할 수있는 일부 작업은 [AllowAnonymous]입니다. 당신이 AuthorizeAttribute의 소스에서 볼 수 있듯이

답변

3

그것은

bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true) 
           || filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true); 

그래서 당신이 RequireHttps에서 자신의 속성을 dervive하고

if (!skipAuthorization && !filterContext.HttpContext.Request.IsSecureConnection) 
     { 

      HandleNonHttpsRequest(filterContext); 
     } 
처럼 있도록 동일한 검사를 추가 할 수 있습니다

AllowAnonymousAttribute의 존재를 확인

및 AllowAnonymousAttribute의 istead를 사용하면 자신 만의 AllowHttpAttribute를 추가하고이 새로운 AllowHttpAttribute로 작업을 표시 할 수 있습니다.