교차 도메인 게시물과 함께 자격 증명을 보내 시나요?


81

자격 증명 이있는 요청 에 따르면 Firefox는 다음과 같은 경우에만 교차 도메인 게시물과 함께 자격 증명을 보냅니다.

invocation.withCredentials = "true";

설정되었습니다… 그러나 jQuery의 Ajax API가 이에 대한 메커니즘을 제공하는 것 같지 않습니다.

내가 놓친 것이 있습니까? 내가 할 수있는 다른 방법이 있습니까?

답변:


168

jQuery 1.5에서는 기능이 손상 될 것으로 예상됩니다.

jQuery 1.5.1부터 xhrFields param을 사용해야합니다.

$.ajaxSetup({
    type: "POST",
    data: {},
    dataType: 'json',
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true
});

문서 : http://api.jquery.com/jQuery.ajax/

보고 된 버그 : http://bugs.jquery.com/ticket/8146


2
이제 하위 도메인에 쿠키를 보낼 수 있습니다. :) 감사합니다!
Radek

7
이것은 교차 (하위 도메인이 아닌) ajax 요청에서도 작동합니까?
가로등

나는 여전히 자격 증명을 입력하라는 메시지가지고있어
존 Grabanski을

@JohnGrabanski 문제를 해결 했습니까?
Selman

41

beforeSend콜백을 사용하여 추가 매개 변수를 설정할 수 있습니다 ( XMLHTTPRequest객체가 유일한 매개 변수로 전달됨).

아시다시피 이러한 유형의 교차 도메인 요청은 일반적인 사이트 시나리오에서는 작동하지 않으며 다른 브라우저에서는 작동하지 않습니다. 나는 FF 3.5가 어떤 보안 제한을 부과하는지조차 알지 못하기 때문에 아무것도 위해 벽에 머리를 부딪히지 마십시오.

$.ajax({
    url: 'http://bar.other',
    data: { whatever:'cool' },
    type: 'GET',
    beforeSend: function(xhr){
       xhr.withCredentials = true;
    }
});

한 가지 더주의해야 할 점은 jQuery가 브라우저 차이를 정규화하도록 설정되어 있다는 것입니다. 이러한 유형의 기능을 금지하는 jQuery 라이브러리에 의해 추가 제한이 부과된다는 것을 알 수 있습니다.


2
api.jquery.com/jQuery.post 에 따르면 유형이 "GET"이어야하며 방법이 아님 : 'GET'예제를 사용할 때 넘어졌습니다
Xosofox

1
@Xosofox 나는 이것이 오래된 주석이라는 것을 알고 있지만 jQuery 1.9부터는 method: 'GET'지원됩니다. api.jquery.com/jquery.ajax
Brad

1
(a)이 함수에 대한 API가 변경되었고 (b)이 함수가 실행 된 후에 생성되는 XHR 객체에 더 이상 액세스 할 수 없기 때문에 jQuery 3+에서는 더 이상 작동하지 않습니다. 대신 xhrFields를 사용해야합니다.
cuniculus

2

jQuery 3 및 이전 버전에서는 다음과 같은 간단한 구성도 개별 요청에 대해 작동합니다.

$.ajax(
        'https://foo.bar.com,
        {
            dataType: 'json',
            xhrFields: {
                withCredentials: true
            },
            success: successFunc
        }
    );

Firefox Dev Tools-> Network 탭 (개별 요청의 보안 탭)에서받은 전체 오류는 다음과 같습니다.

foo.bar.com에 연결하는 동안 오류가 발생했습니다 .SSL 피어가 허용 가능한 보안 매개 변수 집합을 협상 할 수 없습니다. 오류 코드 : SSL_ERROR_HANDSHAKE_FAILURE_ALERT

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.