问题描述
我们正在运营Kibana 4.3服务。我不想修改源代码。
目标是在浏览器向Kibana发出的每个Ajax请求中添加一个加密令牌,称之为A令牌。
背景
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);
}
});寻找可能的解决方案,将不需要分叉基巴纳。
丹尼
发布于 2017-05-09 16:38:01
我也在寻找这个问题的解决方案,但什么也找不到,然后我想出了下一个解决方案:
XMLHttpRequest.prototype.origOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function () {
this.origOpen.apply(this, arguments);
this.setRequestHeader('X-TOKEN', 'the token');
};
https://stackoverflow.com/questions/37963758
复制相似问题