【问题标题】:Should the browser cache HTTP Auth credentials sent via Ajax?浏览器是否应该缓存通过 Ajax 发送的 HTTP Auth 凭据?
【发布时间】:2013-07-26 15:32:04
【问题描述】:

我正在构建一个访问受限的静态网站。我已将服务器配置为使用 HTTP Basic Auth 保护子文件夹(例如 www.example.com/restricted)。 现在,我不想使用标准的浏览器弹出窗口进行登录,因为它很难看,并且不记得会话中的密码。这很丑陋,我提到过吗? =)

所以,我展示了一个 html 表单,并尝试通过 JavaScript 进行身份验证(这里,在 jQuery 的帮助下,但“原始”版本显示了相同的行为)。我调用的函数看起来像

try_login = function(username, password){
  $.ajax({
      url: '/restricted/login.token',
      method: 'GET',
      beforeSend: function(request) {
          request.setRequestHeader(
             'Authorization', 
             'Basic ' + Base64.encode(username + ':' + password));
      },
      success: function () { window.location='/restricted/'; },
      error: function () { $('#error_message').text("Wrong password."); }});

}

现在,身份验证适用于 ajax 请求。如果我使用正确的用户名和密码,“login.token”会正确提供状态码 200,如果我不使用,则会得到 401。

但是浏览器(我测试了 Chrome 28 和 IE 10)在成功回调中的重定向之后再次要求提供凭据。它似乎没有保存凭据。

我做错了什么,还是这确实是预期的行为?如果是,有没有办法作弊?我真的认为浏览器弹出窗口很丑。

由于这是一个静态站点,很遗憾,任何需要活动服务器端代码的身份验证方案都不能在这里使用。

【问题讨论】:

    标签: javascript http xmlhttprequest


    【解决方案1】:

    您需要在每个请求中发送 Authorization 标头。

    试试这个方法 - How to use Basic Auth with jQuery and AJAX?

    【讨论】:

      猜你喜欢
      • 2018-08-21
      • 2017-06-13
      • 2014-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-09
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多