从HTTP请求头中获取授权

18

我已经在SO中搜索了一些关于此问题的帖子,但只找到一些解释此标题用途或如何在c#中获取授权标头的帖子,但我不想从服务器端读取它而是从客户端读取。

是否有任何方法可以从浏览器中获取Base64编码的“Authorization”标头?我想要实现一个工具,在其中您可以登录,如果单击特定按钮,将保存您的用户名。

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

gethttp可以获取某些标头,但无法获取授权标头。我猜测这个标题被隐藏了。

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

仅需要用户名即可。 我正在寻找无需用户输入用户名的解决方案。


3
你是在服务器端使用 C# 还是在客户端使用 JavaScript 尝试读取那个标题? - haim770
哦,忘了说了..js在客户端。 - manti
我正在通过 SVN 进行身份验证,浏览器进行身份验证,这就是为什么我自己找不到答案的原因... - manti
3
永远不要相信浏览器,这就像网络俱乐部的第一条规则一样。来吧! - php_nub_qq
2
好的,这只是用于内部网络使用,所以不应该是什么大问题。 - manti
显示剩余3条评论
3个回答

5

我假设您正在尝试使用基本领域授权机制。这在Stackoverflow上已经有了答复,并涉及到$.ajax() jQuery对象。
如何在jQuery和AJAX中使用基本身份验证?
因此,请不要对我投票。

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

XXXXX是您的用户名和密码的base64编码


2
你可以使用本地的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
  }
)

0

无法获取当前页面请求的标头。这个问题已经在SO上被问过多次。

但是,您可以发起一个新的请求并检索该请求的标头。这样,您就能够获取基本身份验证标头,对该字符串进行base64解码,然后您就有了用户名(以及密码)。

使用以下函数可以在javascript中解码base64,如评论中@ michael建议的那样。

window.atob("base64encodedString");

1
除非您在xhr中发送的标头,否则您获得的标头已经为您所知。这样做没有任何意义。 - afilina
不,这是不可能的。你无法在JS中获取这些头信息。https://dev59.com/Jmsz5IYBdhLWcg3w8Mcb - mik01aj
1
为什么需要实现这个decodeBase64函数,当内置的atob函数可以解码base64时? - Michael
很好的观点。我主要使用这个是因为当时不知道有这个内置功能。 - Jens Kooij

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接