2016-06-22 6 views
1

問題の説明私はすべてのXMLHttpRequests

我々はKibana 4.3サービスを実行しているため、デフォルトのヘッダーを設定するにはどうすればよいです。私はソースコードを変更したくありません。

目的は暗号化されたトークンを追加することです。ブラウザが木場に送るすべてのAjaxリクエストにAトークンを呼び出します。

背景

Kibanaサービスは、nginxのでプロキシされます。

ユーザがKibanaサービスに対してAjaxリクエストを行うと、リクエストはnginx http_auth_requestプロキシによって傍受され、トークンを検証する「auth」サービスに渡されます。存在しないか無効な場合、 "auth"はhttp_auth_requestに201を返し、Kibanaサービスへの要求が実行されます。それ以外の場合は404が返され、有効なトークンなしで要求が拒否されます。

(このスキームは、手元のようなセッションレスの状況でのクロスサイトスクリプティングの対策としてよく使用される暗号化トークンパターンに基づいています)。

私はW3 XMLHttpRequestのドキュメントを読んでいて、setRequestHeaderはopenとsendの後に実行する必要があると思われます。つまり、このスキームは一般的なケースや非常にJSプラットフォームに依存しません。

この例のようにjqueryの.ajaxSetupを用いた試験では、ヘッダは、独立して設定することができないことを確認する:

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

はフォークKibanaを必要としない可能な解決策を探し。

ダニー

+1

の可能な複製を[ jsまたはjQueryを使用してカスタムHTTPヘッダーをajaxリクエストに追加する方法はありますか?](http://stackoverflow.com/questions/7686827/how-can-i-add-a-custom-http-header-to-ajax- request-with-js-or-jquery) –

+0

Lukasz - ありがとう!その投稿はJquery固有です。暗号化されたトークンのようなヘッダーを常に注入したい一般的なケースでは機能しません。 openとsendの後にsetRequestHeaderメソッドを呼び出す必要があります。 Jquery ajaxSetupメソッドはJquery固有です。 –

+1

ああ、私は見る!だから、あなたはjQueryソリューションを探しているのではなく、ネイティブXHRを探していますか?実際には、すべてのXHRは、それがネイティブかどうかに関わらず、jQueryやその他のライブラリから生成されます。私はそれを正しく理解していますか? –

答えて

0

私もこの問題の解決策を探していたが、何かを見つけることができませんでしたし、私は次の解決策を考え出した:

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

関連する問題