クロスドメイン投稿で資格情報を送信しますか?


81

資格情報を含むリクエストによると、Firefoxはクロスドメイン投稿とともに資格情報を送信するのは

invocation.withCredentials = "true";

が設定されています…しかし、jQueryのAjaxAPIがこのためのメカニズムを提供しているようには見えません。

私が見逃したものはありますか?他にできる方法はありますか?

回答:


168

jQuery1.5では機能が壊れているはずです。

jQuery 1.5.1以降、xhrFieldsparamを使用する必要があります。

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

ドキュメント:http//api.jquery.com/jQuery.ajax/

報告されたバグ:http//bugs.jquery.com/ticket/8146


2
これでサブドメインにCookieを送信できます:)ありがとうございます!
Radek 2012年

7
これはクロス(非サブドメイン)ajaxリクエストでも機能するはずですか?
街灯2013

まだ資格情報の入力を求められています
JohnGrabanski20年

@JohnGrabanski問題を修正しましたか?
セルマン

41

beforeSendコールバックを使用して、追加のパラメーターを設定できます(XMLHTTPRequestオブジェクトは唯一のパラメーターとして渡されます)。

ご存知のとおり、このタイプのクロスドメインリクエストは、通常のサイトシナリオでは機能せず、他のブラウザでは機能しません。FF 3.5が課すセキュリティ制限についてもわかりません。そのため、壁に頭をぶつけないでください。

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

注意すべきもう1つのことは、jQueryがブラウザーの違いを正規化するように設定されていることです。このタイプの機能を禁止するjQueryライブラリによってさらに制限が課せられる場合があります。


2
api.jquery.com/jQuery.postによると、タイプは「GET」であり、メソッドではありません:「GET」例を使用するときにつまずいた
Xosofox 2012

1
@Xosofoxこれは古いコメントですが、jQuery1.9ではmethod: 'GET'サポートされています。 api.jquery.com/jquery.ajax
Brad

1
(a)この関数へのAPIが変更され、(b)この関数の実行後に作成されるXHRオブジェクトにアクセスできなくなったため、これはjQuery3 +では機能しなくなったことに注意してください。代わりに、xhrFieldsを使用する必要があります。
カイウサギ

2

jQuery 3およびおそらく以前のバージョンでは、次のより単純な構成が個々のリクエストに対しても機能します。

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

Firefox Dev Tools-> Networkタブ(個々のリクエストのSecurityタブ)で発生した完全なエラーは次のとおりです。

foo.bar.comへの接続中にエラーが発生しました。SSLピアは、受け入れ可能なセキュリティパラメータのセットをネゴシエートできませんでした。エラーコード:SSL_ERROR_HANDSHAKE_FAILURE_ALERT

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.