2009-10-14 2 views
4

컨트롤러 동작에 [RequireSSL] 속성을 추가하여 Https를 활성화 한 것으로 로그인 페이지를 만들었으므로 제대로 작동합니다. 그러나 성공적으로 로그인 한 후에는 https 환경에 남아 있지만 페이지는 https가 아닌 페이지입니다. 아무도 https에서 http 모드로 나가는 방법을 알려줄 수 있습니까? 이와 관련하여 도움을 주시면 대단히 감사하겠습니다.asp.net mvc에서 https에서 http 모드로 빠져 나가는 방법

답변

3

당신은 기본적으로 즉, 효과적으로 {가 requireSSL] 속성의 반대를 수행하는 [DoesNotRequireSSL] 속성을 가지고있는 반대를 할 필요 당신이 경우,

public class DoesNotRequireSSL: ActionFilterAttribute 
    { 
     public override void OnActionExecuting(ActionExecutingContext filterContext) 
     { 
      var request = filterContext.HttpContext.Request; 
      var response = filterContext.HttpContext.Response; 

      if (request.IsSecureConnection && !request.IsLocal) 
      { 
      string redirectUrl = request.Url.ToString().Replace("https:", "http:"); 
      response.Redirect(redirectUrl); 
      } 
      base.OnActionExecuting(filterContext); 
     } 
    } 

또한 http 프로토콜로 리디렉션 여러 페이지에 이러한 동작이 발생하도록하고 싶다면 모든 비 -http 컨트롤러가 상속 할 수있는 기본 컨트롤러를 설정할 수 있으므로 필요없는 모든 페이지에 대해 자신을 반복해야하는 것에 대해 걱정할 필요가 없습니다.

+1

대단히 감사드립니다. 그것은 작동합니다. –

3

주의 : I had a similar question. 내가 배운 중요한 한 가지는 인증 쿠키가 HTTP로 다시 전환 한 후 일반 텍스트로 전송된다는 것입니다. See this.

주의 2 : 당신은 당신이 진짜 조심해야하는 은행 응용 프로그램을 작성하는 경우 지칠대로 지친 You are about to be redirected to a connection that is not secure message

을 고려하는 것을 잊지 마세요 - 또한 공공 와이파이 연결에 대한 사용자의 증가를 실현을 그 어떤 비양심적 인 프록시를 통해 깔끔하게 퍼널 될 수 있습니다. 아마 주류 사이트에 대한 훨씬 더 큰 관심사이지만 우리 모두가 알고 있어야 할 문제입니다.

my other question (글을 쓰는 시점에서 어떤 대답을 -하지만 난 단지 그냥 물어!)를 참조하지

1

난이 꽤 오래된 질문을 알고 있지만, 위에서 제시 한 많은 링크이 코드 주소 죽고

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)] 
public class ForbidHttpsAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public virtual void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext == null) 
     { 
      throw new ArgumentNullException("filterContext"); 
     } 

     if (filterContext.HttpContext.Request.IsSecureConnection) 
     { 
      HandleHttpsRequest(filterContext); 
     } 
    } 

    protected virtual void HandleHttpsRequest(AuthorizationContext filterContext) 
    { 
     // only redirect for GET requests, otherwise the browser might not propagate the verb and request 
     // body correctly. 

     if (!String.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) 
     { 
      throw new InvalidOperationException("The requested resource can only be accessed *without* SSL."); 
     } 

     // redirect to HTTP version of page 
     var url = "http://" + filterContext.HttpContext.Request.Url.Host + filterContext.HttpContext.Request.RawUrl; 
     filterContext.Result = new RedirectResult(url); 
    } 
} 

The code comes from this article, 간단하게 사용자를 강제로 보안 문제의 일부에서 리디렉션에 대해 설명하십시오 System.Web.Mvc 네임 스페이스에 포함 된 RequireHttpsAttribute에 약간의 수정을하여 ASP.NET MVC 5 그것은 HTTPS도 HTTP로.