2010-08-25 21 views
15

Tengo algunos archivos html/js locales con los que me gustaría invocar algunos servidores remotos a través de https y, finalmente, uso Basic Authentication para la solicitud.Autenticación básica con jQuery.ajax request y jsonp

Tengo dos problemas. En primer lugar es que si no especifico 'jsonp' para el tipo de datos, solicitud jQuery.ajax() devuelve el error:

Access to restricted URI denied code: 1012

son mis solicitudes que se consideran entre dominios porque mi archivo de trabajo principal se almacena localmente, pero recuperar datos de un servidor en otro lugar?

Así bien, puedo actualizar la llamada por lo que ahora se ve así:

$.ajax({ 
    url: myServerUrl, 
    type: "GET", 
    dataType: "jsonp", // considered a cross domain Ajax request if not specified 
    username: myUsername, 
    password: myPassword, 

    success: function(result) 
    { 
     // success handling 
    }, 
    error: function(req, status, errThrown){ 
     // error handling 
    } 
}) 

Porque necesito para usar la autenticación básica, que estoy pasando en el nombre de usuario/contraseña, pero si yo controlo la solicitud, que Don No lo veo configurado y, además, el servidor envía una respuesta de error ya que no tiene la información esperada.

Además, como tengo jsonp conjunto, beforeSend no serán invocados.

¿Cómo paso las credenciales usando Basic Authentication para esta solicitud?

Respuesta

12

La versión corta es que no puede hacer esto. Sus sospechas son correctas, porque usted es local y estos archivos son remotos, no puede acceder a ellos, está siendo bloqueado por el same-origin policy. El trabajo en torno a que es JSONP, pero que realmente no parece aplicarse a su situación ...

JSONP funciona de forma diferente, se trata de una petición GET a través de una etiqueta <script> incluyen para obtener el archivo, por lo que está no enviando encabezados especiales ni nada.

Tendrá que proxy la solicitud a través del servidor en el que se encuentra (el dominio donde se ejecuta esta secuencia de comandos) u otra opción de proxy, pero se bloquea el acceso del cliente a otro dominio, principalmente por razones de seguridad.

+5

Esta es la respuesta correcta, JSONP no puede contener los encabezados USER/PWD que requiere Basic Auth. Así que estás condenado si lo haces y maldito si no :) –

0

Creo que tendrá que agregar un servidor proxy de algún tipo. JSONP es solo una manera particular de usar una etiqueta de script. Por lo tanto, no permite establecer encabezados arbitrarios. Y por supuesto, no puedes hacer un XHR de origen cruzado.

7

Intenta hacer http://user:[email protected]. Esto imita una solicitud de autenticación básica.

+2

esto parece funcionar pero solo para algunos navegadores. – jhanifen

+1

El uso de esta sintaxis se bloqueará en Chrom desde la compilación M59: https://www.chromestatus.com/feature/5669008342777856 – Beejamin

Cuestiones relacionadas