2011-11-23 4 views
0

http 스키마의 페이지에서 https url (도메인 및 응용 프로그램이 동일 함)으로 보내고 있습니다. 내가 MVC 3에게 아약스 도우미 사용 : 나는 형식을 사용하는 응용 프로그램에서http : // https (동일한 도메인)에서 ajax 게시에 양식 인증 쿠키가 전송되지 않음

@using (Ajax.BeginForm(MVC.Payment.Confirm(), new AjaxOptions 
{ 
    HttpMethod = "Post", 
    UpdateTargetId = "myId", 
    InsertionMode = InsertionMode.Replace, 
    OnBegin = "$('#popupAjaxLoader').show();", 
    OnSuccess = "$('#popupAjaxLoader').hide();", 
    Url = "https://same.domain/payment/confirm" 
}, new { @action = "https://same.domain.com/payment/confirm" })) 
{ 
... 
} 

을 인증 :

양식을 제출 중 때이 인증 쿠키가 서버로 전송되지 않습니다 것을 볼 수 있습니다 방화범
<forms loginUrl="~/Account/LogOn" timeout="2880" name="MYCOOKIENAME" /> 

, 정도 처리기가 실패합니다 (요청을 승인해야 함). Ajax.BegiForm에 인증 쿠키를 첨부하려면 어떻게해야합니까?

UPDATE : 그것은 아약스 요청에서 다시 정보를 수신 할 필요가없는 경우 counsellorben에 의해 주어진 솔루션이 작동하는지 밝혀졌다

. HTTP에서 HTTPS로 Ajax POST를 보내면 쿠키가 첨부되지 않으므로 필요한 모든 데이터를 숨겨진 양식 필드로 POST해야합니다. 그러나 같은 원본 정책으로 인해 서버 응답에 javascript에 액세스 할 수 없습니다. 결국 아약스를 포기하고이 문제에 대한 궁극적 인 해결책 인 HTTPS URL을 참조하는 iframe 내부에 양식을 배치해야했습니다.

답변

2

이 문제는 Same Origin Policy을 위반합니다. 이 질문에 대한 응답 : Same origin policy with same domain, but https을 참조하십시오. 그것은 전체 포털 사용 HTTPS를 할 수없는 경우

UPDATE

는 다음 대안은 AJAX 양식 제출에 대해 다른 인증 방식을 사용하는 것입니다.

(1) 작성 시간과 (2) GUID가 할당 된 사용자의 ID와 함께 저장소에 GUID를 저장하여 AJAX 양식 용 GUID 토큰을 만드는 것이 좋습니다. 그런 다음 AJAX 양식의 숨겨진 필드에 GUID를 전달하십시오.

AJAX 양식을 통해 호출되는 동작에서 [Authorize] 특성을 제거하고 대신 GUID가 전달되고 GUID가 유효하며 만료되지 않았 음을 확인합니다 (만료 시간을 20 분으로 설정하거나 이러한 상황에서 유효한 모든 것). GUID 토큰을 사용하여 사용자를 식별하고 필요한 경우 계속하십시오.

또한 만료 된 GUID 토큰을 제거하는 몇 가지 방법이 있어야합니다.

이것은 GUID 토큰이인가 된 사용자에게 발행되고 AJAX 양식을 제출하는 사용자를 식별하므로 적절한 보안을 제공해야합니다. 또한 전달 된 인증 쿠키에 더 이상 의존하지 않으므로 AJAX 양식 제출에 대해서만 HTTPS를 사용할 수 있습니다.

+0

그래도 해결 방법이 있습니까? 폼에 입력 된 중요한 데이터가 포함되어 있기 때문에이 Ajax POST 요청이 안전해야하지만 Ajax 스크립트가 실행되는 페이지는 일반 페이지입니다. https로 전환하면 전체 포털이 HTTPS에서 작동해야합니다. 내가 바라는 게 아니야. – PanJanek

+0

응답을 편집 할 당시 양식 인증 쿠키에 의존하지 않고 자체 인증을 구현하는 거의 동일한 솔루션을 코딩하기 시작했습니다. 그것은 가장 깨끗한 해결책 인 것처럼 보인다. 감사! – PanJanek

+0

당신을 진심으로 환영합니다. 분명히 위대한 마음은 똑같이 생각합니다. – counsellorben

관련 문제