【问题标题】:JavaScript redirect URL with Authorization header带有授权标头的 JavaScript 重定向 URL
【发布时间】:2015-04-19 18:50:50
【问题描述】:

我成功地调用了 Apache 中受基本身份验证(htpasswd 等)保护的目录后面的 URL。 Ajax GET 请求正常工作并返回受保护的内容:

var encoded = Base64.encode(username + ':' + password);
$.ajax({
    url: "/app/test",
    type: "GET",
    beforeSend: function(xhr) {
        xhr.setRequestHeader('Authorization', 'Basic ' + encoded);
    },
    success: function() {
        window.location.href = '/app/test.html';
    }
});

我最初的假设是,一旦网络会话成功授权了请求,就可以在“成功”块中进行重定向,而无需询问用户凭据。调用此代码块时,用户已在未受保护的环境中输入用户名和密码。但是,当调用重定向时,浏览器会弹出登录/密码窗口。

关于如何使用用户提供的基本授权对会话进行预授权有什么建议?

【问题讨论】:

  • 如果您使用 AJAX 的 headers 设置而不是 beforeSend 进行身份验证,它是否有效?例如:headers: { "Authorization": "Basic " + encoded }
  • 已经有一段时间了,我相信我测试过的结果是一样的。
  • 在 AJAX 的情况下,Authorization Header works 似乎就是这样。 Cookie 会随请求自动发送,您可以在服务器上读取它以检查授权(需要牢记 XSS、CSRF)。您想使用基本身份验证的任何具体原因?

标签: javascript jquery apache basic-authentication


【解决方案1】:

使用 AJAX 请求进行日志记录通常有效,因为成功的 AJAX 请求会设置会话 cookie,这些 cookie 将在所有后续请求中透明地发送。

也许您的 cookie 已设置,但由于某些原因未透明设置:您可以使用 xhr.getAllResponseHeaders() / xhr.getResponseHeader() 检查,然后使用 document.cookie 设置它们。

如果没有会话 cookie,则此行为通常会失败。

您可以尝试使用url中的用户名+密码进行重定向(不推荐,因为之后用户名+密码可能会在浏览器地址栏中显示):

    window.location.href =
        window.location.protocol + "//" +
        username + ":" + password + "@" +
        window.location.hostname +
        (window.location.port ? ":" + window.location.port : "") +
        '/app/test.html';

您还应该测试以延迟重定向...因为它可能正在工作,但您需要给浏览器一些额外的时间,您是否尝试过:

   var encoded = Base64.encode(username + ':' + password);
   $.ajax({
       url: "/app/test",
       type: "GET",
       beforeSend: function(xhr) {
           xhr.setRequestHeader('Authorization', 'Basic ' + encoded);
       },
       success: function() {
           setTimeout(function() {
               window.location.href = '/app/test.html';
           }, 333);
       }
   });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 2015-10-20
    • 1970-01-01
    • 2020-07-24
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多