2014-03-28 3 views
0

누구든지이 문제를 도와 주시면 감사하겠습니다. 현재 우리의 ASP.NET 응용 프로그램에서 일부 jQuery AJAX 메서드를 구현하여 GET 및 POST 데이터를 서버에 보내고 있습니다. 가볍고 구현하기가 쉽다는 몇 가지 인증 형식을 원합니다.AJAX WCF 서비스 인증 요청

현재 각 AJAX 요청과 함께 Fiddler에서 볼 수 있듯이 양식 인증 쿠키가 WCF 서비스로 전송됩니다. WCF 서비스에 요청을 받으면 Forms 인증 쿠키를 해독하는 방법이 있습니다. 현재 쿠키가 null이 아니고 만료되지 않은 경우에만 데이터에 대한 응답을 제공합니다. 이것은 잘 작동하며 사용자가 Google의 보안 로그인 시스템을 통과 한 경우 쿠키가 존재하는 유일한 방법입니다.

내가 알고 싶은 것은 AJAX 호출을 보호하는 것이 기본 임에도 불구하고 유효한 양식인지 여부입니다.

양식 쿠키를 모방하기가 쉽습니까? 양식 쿠키를 우회하는 것이 가능합니까? 내가 여기 깊이 내키지 않는 한 어떤 충고도 받아 들여질 것이다.

편집 : 현재 SSL 및 보안 HTTPS 전송을 사용할 수 있습니다.

가 여기에 우리의 코드의 예 : 모든

private bool AuthenticateAJAXRequest() 
{ 
    // assume user is not authenticated 
    bool authenticated = false; 
    if (HttpContext.Current != null) 
    { 
     if (HttpContext.Current.Request != null) 
     { 
      var authCookie = HttpContext.Current.Request.Cookies["authCookie"]; 
      if (authCookie != null) 
      { 
       FormsAuthenticationTicket fTicket = FormsAuthentication.Decrypt(authCookie.Value); 
       if (fTicket != null) 
       { 
        if (!fTicket.Expired) 
         authenticated = true; 
       } 
      } 
     } 
    } 
    return authenticated; 
} 

답변

1

첫째, AJAX (XHR - XML의 HTTP 요청) 비동기 요청은 "동일 출처"정책을 준수합니다. 즉, 브라우저가 페이지가 시작된 서버가 아닌 서버로 AJAX 호출을하기 위해 암시 적으로 거부하거나 제한합니다. 이것은 도메인 간 스크립팅 공격을 처리합니다. (JSONp를 사용하거나 스크립트 태그를 수동으로 사용하여 크로스 도메인 비동기 호출을 만들 수는 있지만 현재 토론의 범위가 아닌 다른 볼 게임입니다.) 쿠키가 있는지 확인하고 그때 당신은 곤경에 빠져들 것입니다 일부 사용자가 브라우저에서 쿠키를 껐을 수 있습니다. 대신 각 사용자 세션에 대해 저장하고 검색 할 수있는 사용자 수준의 고유 ID를 사용하는 것이 좋습니다. 이 고유 ID를 각 Ajax 요청의 일부로 보내고 서버의 데이터 저장소 (캐시되거나 지속됨)에 대해 유효성을 검사합니다. 이렇게하면 쿠키에 상관없이이 시스템이 계속 작동한다는 것을 확신 할 수 있습니다. 또한 사용자가 로그 오프 한 후에 고유 한 ID를 삭제해야 향후 요청 (전체 페이지 또는 Ajax)이 적용되지 않습니다. 희망 사항입니다.

+0

응답 해 주셔서 감사합니다. 도메인 문제는 Google의 서비스와 웹 사이트가 동일한 웹 사이트에서 호스팅되므로 문제가되지 않으며 테스트를 거쳤습니다. 쿠키에 관해서, 우리 사이트 방문자는 매우 크지 않을 것이고, 웹 사이트보다 사용자 포털에 가깝습니다. 현재의 구현은 이미 많은 JavaScript와 함께 쿠키를 사용합니다. 우리는 미래의 테스터에게 사이트를 사용하기 위해 쿠키와 JScript를 사용해야한다고 이미 말했습니다. 고유 한 ID에 대해 사용자에게 고유 한 ID를 할당하는 방법은 무엇입니까? 그들의 공급자 열쇠? 또는 다른 것. – MightyLampshade