web-dev-qa-db-fra.com

Envoi d'informations d'identification avec des publications inter-domaines?

Selon Demandes avec informations d'identification , Firefox n'enverra que les informations d'identification avec les publications inter-domaines si 

invocation.withCredentials = "true"; 

est défini… Mais il ne semble pas que l'API Ajax de jQuery fournisse un mécanisme pour cela.

Y a-t-il quelque chose que j'ai raté? Y a-t-il un autre moyen de le faire?

71
David Wolever

La fonctionnalité est supposée être interrompue dans jQuery 1.5.

Depuis jQuery 1.5.1, vous devez utiliser le paramètre xhrFields.

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

Docs: http://api.jquery.com/jQuery.ajax/

Bogue signalé: http://bugs.jquery.com/ticket/8146

145
Kangur

Vous pouvez utiliser le beforeSend callback pour définir des paramètres supplémentaires (l'objet XMLHTTPRequest lui est transmis comme paramètre unique). 

Juste pour que vous sachiez, ce type de requête interdomaine ne fonctionnera pas dans un scénario de site normal et avec aucun autre navigateur. Je ne sais même pas quelles sont les limites de sécurité imposées par FF 3.5, afin que vous ne vous cogniez pas la tête contre le mur pour rien:

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

Une dernière chose à prendre en compte est que jQuery est configuré pour normaliser les différences entre les navigateurs. Vous constaterez peut-être que la bibliothèque jQuery impose d'autres limitations qui interdisent ce type de fonctionnalité.

39
Doug Neiner

Dans jQuery 3 et peut-être dans des versions antérieures, la configuration plus simple suivante fonctionne également pour des requêtes individuelles:

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

L'erreur complète que je rencontrais dans Firefox Dev Tools -> onglet Réseau (dans l'onglet Sécurité pour une requête individuelle) était:

Une erreur s'est produite lors d'une connexion à l'homologue foo.bar.com.SSL: impossible de négocier un ensemble acceptable de paramètres de sécurité.Error code: SSL_ERROR_HANDSHAKE_FAILURE_ALERT

0
chim