从HTTP-Request标头获取授权

时间:2014-07-28 08:26:22

标签: javascript jquery html httprequest

我已经在SO中搜索了一些关于此的线程,但是只能找到一些解释了这个头的内容或者如何在c#中获取授权头但是我不想从服务器端但是从客户端读取它侧。

有没有办法从浏览器获取Base64编码标题“授权”? 我想实现一个您可以登录的工具,如果您点击一个特定按钮,您的用户名将被保存。

我的问题是浏览器自动执行授权,使用jQuery和JavaScript方法,您只能设置请求标头并获取响应标头。我找不到获取请求标头的方法。

gethttp可以获得一些标题,但不能获得授权标题。 我的猜测是这个标题是隐藏的。

我正在通过SVN登录,浏览器会在您进入网站时进行授权。

只有用户名就足够了。 我正在寻找用户无需输入用户名的解决方案。

3 个答案:

答案 0 :(得分:4)

我假设您正在尝试使用Basic Realm授权机制 这已经在Stackoverflow上得到了回复,涉及$.ajax() jquery对象 How to use Basic Auth with jQuery and AJAX?
所以请不要在这个上投票给我

$.ajaxSetup({
  headers: {
    'Authorization': "Basic XXXXX"
  },
  data: '{ "comment" }',
  success: function (){
    alert('Thanks for your comment!'); 
  }
});

其中XXXXX是您的用户名:密码base64编码

答案 1 :(得分:0)

无法获取CURRENT页面请求的标头。这已被问过几次on SO

但是,您可以发出新请求并检索该请求的标头。通过这种方式,您可以获得Basic Auth标头,base64解码该字符串,然后您拥有用户名(以及密码)。

使用@ broc.seib提供的in this answer函数可以使用javascript解码base64。

decodeBase64 = function(s) {
    var e={},i,b=0,c,x,l=0,a,r='',w=String.fromCharCode,L=s.length;
    var A="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    for(i=0;i<64;i++){e[A.charAt(i)]=i;}
    for(x=0;x<L;x++){
        c=e[s.charAt(x)];b=(b<<6)+c;l+=6;
        while(l>=8){((a=(b>>>(l-=8))&0xff)||(x<(L-2)))&&(r+=w(a));}
    }
    return r;
};

答案 2 :(得分:0)

您可以使用本机fetch API

fetch("http://localhost:8888/validate",{
  method:"GET",
  headers: {"Authorization": "Bearer xxxxx"}
})
.then(res => res.json())
.then(
  (result) => {
    // do something
  },
  // Note: it's important to handle errors here
  // instead of a catch() block so that we don't swallow
  // exceptions from actual bugs in components.
  (error) => {
    // handle error
  }
)