2012-04-11 15 views
5

Ich habe die folgenden Fragen hier auf Stackoverflow ohne Glück in was ich versucht zu tun.Senden von Autorisierungsheadern mit jquery und ajax

Ajax Authorization Request headers fails again and again

jQuery Ajax Unauthorized 401 Error

Sending credentials with cross-domain posts?

Hier ist mein Code, dass ich derzeit haben:

$(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> 

Die Sub-Domain Ich habe Passwort durch eine .htpasswd Datei geschützt ist. Der Login der Site funktioniert gut für mich mit dem Benutzernamen/Passwort Combo in der Base64-Codierung verwendet.

Im Ausführen dieses Skript auf einer anderen Domäne als die, auf der die URL ist, weshalb ich die jsonp = habe? in der URL

Die Antwort im von der Konsole im Browser bekommen ist: GET http://sample.domain.com/script.php?name1=value1&jsonp=jsonp1334177732136 401 (Authorization Required)

+0

Warum verwenden Sie hier grundlegende auth? Dein JS wird das base64-Passwort der Welt zugänglich machen, so dass es keine Sicherheit bietet. Oder habe ich deine Situation missverstanden? – jimw

+0

Um ehrlich zu sein, jede Methode ist unsicher über HTTP. Deshalb existiert HTTPS. – freakish

+0

Die Sicherheit ist hier nicht die Frage. Dies ist nur ein Beispiel von dem, was ich habe. Ich habe das auf das Wesentliche reduziert, um etwas zur Arbeit zu bringen. Nachdem ich die grundlegende Arbeit habe, mache ich es sicher. – bretterer

Antwort

4

JSONP verwendet einen Skript-Tag-Proxy. Benutzerdefinierte Header werden nicht unterstützt. Haben Sie die Kontrolle über den Endpunkt? Wenn ja, sehen Sie nach, ob Sie CORS aktivieren oder den Authentifizierungsschlüssel in der GET-Zeichenfolge übergeben.

Bei der Verwendung von JSONP JQuery konvertiert Ihre URL "Ajax" Anfrage an:

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

es schreibt dann eine Zufallsfunktion

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

und anhängt Rückruf = json9409d0sf0d9s0df90

Ihren Server dann? sagt

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

und sendet diese als Antwort so zurück

json9409d0sf0d9s0df90({some: data}); 

vom Browser exexcuted und behandelt durch magische Handler jQuery, dass es wie ein normales Ajax Rückruf reagieren zu machen.

AFAIK, <script src=""></script> Asset-Lasten werden benutzerdefinierte Header nicht von einem Standardbrowser übernommen.

5

Der Header Name ist Authorization, und Sie senden "Authentication"

z.B.

Authorization: Grund QWxhZGRpbjpvcGVuIHNlc2FtBmU =

Verwandte Themen