2016-06-22 9 views
1

ProblembeschreibungWie stelle ich einen Standard-Header für alle XMLHttpRequests

Wir sind ein Kibana 4.3-Dienst ausgeführt wird. Ich möchte den Quellcode nicht ändern.

Das Ziel ist, ein verschlüsseltes Token hinzuzufügen, nennen Sie es A-Token zu jeder Ajax-Anfrage, die der Browser an Kibana macht.

Hintergrund

Der Kibana Service wird von nginx proxied.

Wenn ein Benutzer eine Ajax-Anfrage an den Kibana-Service sendet, wird die Anfrage von einem Proxy http_auth_request von nginx abgefangen und an einen "auth" -Dienst weitergeleitet, der das Token validiert. Wenn es fehlt oder ungültig ist, gibt "auth" 201 an http_auth_request zurück und die Anforderung an den Kibana-Dienst wird ausgeführt, andernfalls wird ein 404 zurückgegeben und die Anforderung wird abgelehnt, da sie ohne ein gültiges Token erstellt wurde.

(Dieses Schema basiert auf dem verschlüsselten Token-Muster, das oft als Gegenmaßnahme für Cross-Site-Scripting in sitzungslosen Situationen wie dem vorliegenden verwendet wird).

Ich habe die W3 XMLHttpRequest-Dokumentation gelesen und es scheint, dass setRequestHeader nach dem Öffnen und vor dem Senden ausgeführt werden muss - was impliziert, dass dieses Schema entweder in einem allgemeinen Fall oder sehr JS-abhängig ist.

Ein Test des JQuery .ajaxSetup wie in diesem Beispiel verwendet wird, bestätigt, dass Header nicht unabhängig voneinander eingestellt werden kann:

$.ajaxSetup({ 
    beforeSend: function(xhr) { 
       xhr.setRequestHeader(A-Token", 1314159); 
        } 
}); 

nach möglichen Lösungen suchen, die Forking Kibana nicht erforderlich.

Danny

+1

Mögliche Duplikat von [ Wie kann ich einen benutzerdefinierten HTTP-Header zu einer Jax-Anfrage mit js oder jQuery hinzufügen?] (Http://stackoverflow.com/questions/7686827/how-can-i-add-a-custom-http-header-to-ajax- Anfrage-mit-js-oder-jquery) –

+0

Lukasz - danke! Dieser Beitrag ist Jquery-spezifisch. Es funktioniert nicht in einem allgemeinen Fall, in dem Sie immer einen Header wie ein verschlüsseltes Token einfügen möchten. Die Methode setRequestHeader muss nach dem Öffnen und vor dem Senden aufgerufen werden. Die Jquery ajaxSetup-Methode ist Jquery-spezifisch. –

+1

Ah, ich verstehe! Sie suchen also keine jQuery-Lösung, sondern ein natives XHR? Oder tatsächlich erzeugt jedes XHR, egal ob es nativ ist, von jQuery oder einer anderen Bibliothek. Verstehe ich es richtig? –

Antwort

0

ich auch für dieses Problem für Lösung gesucht, aber konnte nichts finden, und dann kam ich mit der nächsten Lösung:

 XMLHttpRequest.prototype.origOpen = XMLHttpRequest.prototype.open; 
 
     XMLHttpRequest.prototype.open = function() { 
 
      this.origOpen.apply(this, arguments); 
 
      this.setRequestHeader('X-TOKEN', 'the token'); 
 
     };

Verwandte Themen