4

我正在建立一个访问受限的静态网站。我已将服务器配置为使用 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)在成功回调中的重定向之后再次询问凭据。它似乎没有保存凭据。

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

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

4

1 回答 1

1

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

试试这种方法 -如何将 Basic Auth 与 jQuery 和 AJAX 一起使用?

于 2013-10-31T17:23:12.047 回答