2012-04-11 10 views
5

He visto las siguientes preguntas aquí en stackoverflow sin suerte en lo que estoy tratando de hacer.Enviando encabezados de autorización con jquery y ajax

Ajax Authorization Request headers fails again and again

jQuery Ajax Unauthorized 401 Error

Sending credentials with cross-domain posts?

Aquí está mi código que tengo actualmente:

$(document).ready(function() { 
     $.ajax({ 
      url: 'http://sample.domain.com/script.php?name1=value1&jsonp=?', 
      type: 'GET', 
      dataType: 'json', 
      contentType: "application/json", 
      beforeSend: function(xhr) { 
       xhr.setRequestHeader("Authentication", "Basic ZnJvbWFwcGx********uOnRoM24zcmQ1UmgzcjM=") //Some characters have been replaced for security but this is a true BASE64 of "username:password" 
      }, 
      success: function(data){ 
       alert(data); 
      } 
     }); 
    }); 


</script> 

El subdominio que tengo es protegido por un archivo .htpasswd contraseña. El inicio de sesión del sitio funciona bien para mí usando el combo de nombre de usuario/contraseña utilizado en la codificación base64.

Estoy ejecutando esta secuencia de comandos en un dominio diferente al que está en la url que es por qué tengo el jsonp =? en la url

La respuesta im conseguir desde la consola en el navegador es: GET http://sample.domain.com/script.php?name1=value1&jsonp=jsonp1334177732136 401 (Authorization Required)

+0

¿Por qué utiliza autenticación básica aquí? Su JS expondrá la contraseña de base64 al mundo, por lo que no ofrecerá ningún tipo de seguridad. ¿O he entendido mal tu situación? – jimw

+0

Para ser sincero, todos los métodos no son seguros a través de HTTP. Es por eso que HTTPS existe. – freakish

+0

La seguridad aquí no es la pregunta. Esto es solo una muestra de lo que tengo. He reducido esto a lo básico para intentar que algo funcione. Después de que tenga el funcionamiento básico, lo haré seguro. – bretterer

Respuesta

4

JSONP utiliza un proxy etiqueta de script. No admitiría encabezados personalizados. ¿Tienes el control del punto final? Si es así, busque activar CORS, o pase la clave de autenticación en la cadena GET.

Al utilizar jsonp jQuery convierte la URL de solicitud "ajax" a:

<script src="[endpoint]"></script> 

se escribe entonces una función aleatoria

var json9409d0sf0d9s0df90 = function() { 
    //some callback logic here. 
} 

y anexa devolución de llamada = json9409d0sf0d9s0df90

su servidor, entonces? dice

echo $_GET['callback] . "(" . $json . ")"; 

y envía de vuelta que como la respuesta de modo

json9409d0sf0d9s0df90({some: data}); 

se exexcuted por el navegador y manipulados por los manipuladores de jQuery mágicos que hacen que responde como una devolución de llamada Ajax normal.

AFAIK, <script src=""></script> cargas de activos no tendrá encabezados personalizados por ningún navegador estándar.

5

El nombre de la cabecera es Authorization, y va a enviar "Authentication"

por ejemplo,

Autorización: Básico QWxhZGRpbjpvcGVuIHNlc2FtBmU =

Cuestiones relacionadas