web-dev-qa-db-ja.com

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

Credentials with Requests によると、Firefoxは次の場合にクロスドメインの投稿とともに資格情報のみを送信します。

invocation.withCredentials = "true";

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

見逃したことはありますか?他にできる方法はありますか?

71
David Wolever

JQuery 1.5では機能が壊れているはずです。

JQuery 1.5.1以降、xhrFieldsパラメーターを使用する必要があります。

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

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

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

146
Kangur

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

ご存知のように、このタイプのクロスドメインリクエストは、通常のサイトシナリオでは機能せず、他のブラウザーでは機能しません。 FF 3.5がどのようなセキュリティ制限を課しているのかさえ知りません。ただ、あなたが何もせずに壁にぶつからないように:

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

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

39
Doug Neiner

JQuery 3およびおそらく以前のバージョンでは、次のより単純な構成も個々の要求に対して機能します。

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

Firefox開発ツール-> [ネットワーク]タブ(個々のリクエストの[セキュリティ]タブ)で発生した完全なエラーは次のとおりです。

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

0
chim