2014-01-16 2 views
0

내 MVC4 모바일 응용 프로그램에는 등록, 로그인 페이지 및 나머지 페이지가 있습니다. 나는 등록 및 로그인 페이지와 같은 모든 민감한 정보 페이지와 HTTP를 다시 페이지로 보내는 HTTPS 연결로 사용자를 리디렉션하고 싶습니다.MVC4 모바일 응용 프로그램에서 HTTP에서 HTTPS로 리디렉션

 if (!HttpContext.Request.IsSecureConnection) 
     { 
      var url = new UriBuilder(HttpContext.Request.Url); 

      url.Scheme = "https"; 

      Response.Redirect(url.Uri.AbsoluteUri); 
     } 

그것을 : 당신이 (호출 후, 당신은 단순히 자신의 방법이를 추가 할 수의 코스) 방법의 맨 위에 다음 코드를 추가 HTTPS가 될하고자하는 컨트롤러 액션 내에서

+0

[HTTP에서 HTTPS 로의 리디렉션 방법 (IIS7.5)] (http://stackoverflow.com/questions/4945883/how-to-redirect-http-to-https-of-mvc) -application-iis7-5) – SilverlightFox

+0

내 사이트의 일부 페이지를 리디렉션하고 싶습니다. 모든 페이지 또는 전체 사이트가 아닙니다. –

답변

0

난 당신이 클래스

public class RequireHttpsConditional : RequireHttpsAttribute 
{ 
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) 
    { 
     var useSslConfig = ConfigurationManager.AppSettings["UseSSL"]; 
     if (useSslConfig != null) 
     { 
      if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase)) 
      { 
       throw new InvalidOperationException("The requested resource can only be accessed via SSL."); 
      } 

      var request = filterContext.HttpContext.Request; 
      string url = null; 
      int sslPort; 

      if (Int32.TryParse(useSslConfig, out sslPort) && sslPort > 0) 
      { 
       url = "https://" + request.Url.Host + request.RawUrl; 

       if (sslPort != 443) 
       { 
        var builder = new UriBuilder(url) { Port = sslPort }; 
        url = builder.Uri.ToString(); 
       } 
      } 

      if (sslPort != request.Url.Port) 
      { 
       filterContext.Result = new RedirectResult(url); 
      } 
     } 
    } 
} 

를 넣고 작업 결과 이상이 [RequireHttpsConditional]를 사용하여 조건부 기능을 사용하는 것을 선호합니다.

나는이 코드를 인터넷 어딘가에 가지고있어 잘 작동하고있다. 의 web.config appSettings는에

<add key="UseSSL" value="443" />

하고 마우스 오른쪽 버튼을 클릭 한 다음 "을 바인딩 편집"을 클릭하여 프로젝트를 IIS에서

[RequireHttpsConditional] 
    public ActionResult SignIn() 
{ 
} 

를 넣어 필요 조치 결과 위의 컨트롤러에서 사용 사용자 정의 유형 https 및 포트 번호 443을 추가하십시오 (변경할 수 있음)

프로덕션 환경에서만 작동합니다. 로컬에서 실행될 때 작동하지 않을 것입니다.

로컬에서 실행하면 request.Url.Host이 표시되어 localhost 만 반환되며 포트 번호가 누락됩니다. MVC에서이 코드를 사용하면 페이지를로드 할 때이 코드를 넣는 페이지를 찾을 수 있습니다.

특정 포트 번호로 localhost를 사용하는 대신 호스트를 할당하면이 방법이 유용합니다.

+1

깨끗한 코드.감사 Saurabh –

0

auth 쿠키에 대해 MITM attack을 방지하려면 사이트 전체에 HTTPS를 유지하는 것이 좋습니다.

+0

내 컨트롤러에서이 코드를 사용하면 내보기가 표시되지 않습니다. –

+0

대신 무엇이 표시됩니까? Firebug (HTTP 상태 코드)에서 어떤 응답을 얻습니까? – SilverlightFox

+0

오류 메시지가 표시되지 않습니다. 단순히 이전 페이지 만 표시합니다. –

관련 문제