问题描述
我们正在运行Kibana 4.3服务。我不想修改源代码。
目标是添加一个加密的令牌,将其称为A-Token,用于浏览器向Kibana发出的每个Ajax请求。
背景
Kibana服务由nginx代理。
当用户向Kibana服务发出Ajax请求时,该请求被nginx http_auth_request代理拦截并传递给" auth"验证令牌的服务。如果它丢失或无效,那么" auth"将201返回到http_auth_request并执行对Kibana服务的请求,否则返回404并且拒绝该请求,因为它是在没有有效令牌的情况下生成的。
(此方案基于加密令牌模式,通常用于在无会话情况(如手头的情况下)中跨站点脚本的对策。
我阅读了W3 XMLHttpRequest文档,似乎setRequestHeader需要在打开之后和发送之前运行 - 这意味着这种方案在一般情况下是不可能的,或者非常依赖JS平台。
使用Jquery .ajaxSetup进行的测试(如此示例)确认无法单独设置标头:
$.ajaxSetup({
beforeSend: function(xhr) {
xhr.setRequestHeader(A-Token", 1314159);
}
});
寻找可能不需要分叉Kibana的解决方案。
丹尼
答案 0 :(得分:1)
我也在寻找这个问题的解决方案,但找不到任何东西,然后我想出了下一个解决方案:
XMLHttpRequest.prototype.origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function () {
this.origOpen.apply(this, arguments);
this.setRequestHeader('X-TOKEN', 'the token');
};